自定义log4j日志输出

2018-12-07  本文已影响9人  Graddy

引入log4j-x.x.xx.jar、slf4j-api-x.x.xx.jar两个jar包。
1.定义抽象类AbstractLayout :

public abstract class AbstractLayout extends Layout {

    protected final static DateFormat dateFormat = new SimpleDateFormat("yyMMdd HH:mm:ss,SSS");

    private String header = "";

    public void setHeader(String header) {
        if (header == null)
            return;
        this.header = header;
    }

    public String getHeader() {
        return this.header;
    }

}

2.自定义日志打印格式:

/**
 * 
 * 自定义日志打印格式
 * 
 */
public class ContextFileAppendLayout extends AbstractLayout {

    public void activateOptions() {
    }

    public String format(LoggingEvent event) {
        Date date = new Date(event.timeStamp);
        String msg = event.getRenderedMessage();
        if (msg == null) {
            msg = "";
        }
        StringBuffer buf = new StringBuffer(msg.length() + 100);
        buf.append(dateFormat.format(date)).append("\t");
        buf.append(event.getLevel()).append("\t");
        buf.append(msg).append("\r\n");
        if (event.getThrowableStrRep() != null) {
            String[] rows = event.getThrowableStrRep();
            for (int i = 0; i < rows.length; ++i) {
                buf.append(rows[i]).append("\r\n");
            }

        }
        return buf.toString();
    }

    public boolean ignoresThrowable() {
        return false;
    }
}

3.LogFactory:

public class LogFactory {

    private final static Level serviceLogLevel = Logger.getLogger("com.suntek.eap.service").getLevel();

    private final static Level timerLogLevel = Logger.getLogger("com.suntek.eap.server.timer").getLevel();

    private final static Map<String, Logger> serviceLoggers = new ConcurrentHashMap();

    public static Logger getServiceLog(String moduleName) {

        if (serviceLoggers.containsKey(moduleName)) {

            return serviceLoggers.get(moduleName);

        }

        Logger log = initLogger(moduleName);

        serviceLoggers.put(moduleName, log);

        return log;

    }

    public static TimerLog getTimerLog(String timerName) {

        if (timerLoggers.containsKey(timerName)) {

            return timerLoggers.get(timerName);

        }

        Logger log = initLogger(timerName);

        TimerLog timerLog = new TimerLog(timerName, log);

        timerLoggers.put(timerName, timerLog);

        return timerLog;

    }

    private synchronized static Logger initLogger(String moduleName) {

        Layout layout = new ContextFileAppendLayout();

        String logFilePath = SystemConfig.getProperty("user.dir") + "/logs/" + moduleName + ".log";

        Appender appender;

        try {

            appender = new RollingFileAppender(layout, logFilePath, true);

        } catch (IOException e) {

            throw new RuntimeException("获取日志失败,创建日志文件失败!");

        }

        return newALogger(moduleName, appender);

    }

    private static Logger newALogger(String logName, Appender appender) {

        Logger logger = Logger.getLogger(logName);

        logger.removeAllAppenders();

        logger.addAppender(appender);

        if (logName.toUpperCase().contains("TIMER")) {

            logger.setLevel(timerLogLevel);

        } else {

            logger.setLevel(serviceLogLevel);

        }

        return logger;

    }

}

4.工具类:


public class Log {

    public static Logger log = LogFactory.getServiceLog("myLog");

}

5.使用方法:


public static void main(String[] args) {
        Log.log.debug("hello world");
    }

上一篇下一篇

猜你喜欢

热点阅读