美文网首页
自定义log4j日志输出

自定义log4j日志输出

作者: Graddy | 来源:发表于2018-12-07 19:50 被阅读9次

引入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");
    }

相关文章

  • java日志框架log4j的使用

    log4j 简介 Log4j由三个重要的组件构成:日志信息的优先级,日志信息的输出目的地,日志信息的输出格式。日志...

  • log4j

    log4j是日志输出插件,专门用于进行日志管理。日志是系统运行过程中的后台输出信息。传统方式获取日志:System...

  • #30天专注成长计划# day23 Log4j输出日志格式

    Log4j输出日志格式 Log4J采用类似C语言中的printf函数的打印格式格式化日志信息,打印参数如下: - ...

  • log4j2+Slf4j日志配置文件

    log4j简介 log4j是java常见的日志输出框架, 2015年5月,Apache宣布Log4J 1.x 停止...

  • logstash使用filter删除不需要的日志

    数据流 日志的流转路径:logstash收集log4j的日志,并对日志进行过滤,输出给elasticsearch,...

  • LOG4J 配置讲解

    log4j日志输出格式一览: %c 输出日志信息所属的类的全名%d 输出日志时间点的日期或时间,默认格式为ISO8...

  • Spark任务中的log4j简单配置方法

    Spark默认是集成log4j作为日志框架的,因此在我们的Spark作业中也使用log4j来输出日志。不过,如果只...

  • Log4J学习笔记

    Log4J的三个组件: Logger:日志记录器,负责收集处理日志记录(如何处理日志) Appender:日志输出...

  • Log4j入门

    Log4J是什么? Log4J是Apache基金会下一个开源的日志管理项目,可以高度自定义日志的收集过程,和收集粒...

  • Log4J概念

    Log4j中有三大组件:日志器(Logger)、日志输出目标(Appender)、格式化器(Layout) Log...

网友评论

      本文标题:自定义log4j日志输出

      本文链接:https://www.haomeiwen.com/subject/oryxhqtx.html