项目中日志的一个小应用

需求

项目中的Maven中已经添加了Logger的依赖,现在想要对版块中的消息日志在本地记录。但是其他版块依赖中已经做了looger配置(Looger的输出文件,输出内容,级别之类的),在不影响其他模块的基础之上,决定采用代码动态指定配置,生成自用的logger对象。

解决方案:

直接上代码

   LoggerContext loggerContext = (LoggerContext)LoggerFactory.getILoggerFactory();
    Logger logger = loggerContext.getLogger(className); 
  
   //定义Appender
    logger.detachAndStopAllAppenders();
    RollingFileAppender appender = new RollingFileAppender();
    appender.setFile(filePattern);//设置文件名字
   
    //Appender的的属性配置  文件名字、位置、时间间隔
    TimeBasedRollingPolicy policy = new TimeBasedRollingPolicy();
    policy.setContext(loggerContext);
    policy.setMaxHistory(5);
    policy.setFileNamePattern(filePattern + "_%d{yyyy-MM-dd}");
    policy.setParent(appender);
    policy.start();
   
   //日志格式化
    PatternLayoutEncoder encoder = new PatternLayoutEncoder();
    encoder.setContext(loggerContext);
    encoder.setPattern(messagePattern);
    encoder.start();
   
    //启动Appender
    appender.setRollingPolicy(policy);
    appender.setContext(loggerContext);
    appender.setEncoder(encoder);
    appender.start();

    //将Appender加入logger
    logger.addAppender(appender);
    logger.setLevel(level);
    logger.setAdditive(false);//是否将消息传递给父节点
    return logger;

说明

上述代码主要分为三个部分:
-Logger对象的生成,及Logger对象上下文、appender、pattern指定
-Appender对象生成(动态日志文件)
-Appender对象的属性配置(位置,时间,回滚日志名字格式,日志保留的最大天数)
-日志文件中的消息格式

问题

  • looger.setAdditive();默认值为true,由于其他版块已经有Logger对象,若不想让该信息再输出到父类,需要指定为false;
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 在应用程序中添加日志记录总的来说基于三个目的:监视代码中变量的变化情况,周期性的记录到文件中供其他应用进行统计分析...
    时待吾阅读 10,485评论 1 13
  • 在应用程序中添加日志记录总的来说基于三个目的:监视代码中变量的变化情况,周期性的记录到文件中供其他应用进行统计分析...
    时待吾阅读 10,434评论 0 6
  • from:https://www.cnblogs.com/ITtangtang/p/3926665.html一、L...
    enshunyan阅读 8,556评论 0 0
  • log4j 1.1 简介 Log4j是一个由Java编写可靠、灵活的日志框架,是Apache旗下的一个开源项目;现...
    贾博岩阅读 12,403评论 1 32
  • 一、Log4j简介 Log4j有三个主要的组件:Loggers(记录器),Appenders (输出源)和Layo...
    默默守护阅读 5,885评论 2 8