需求
项目中的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;
网友评论