一、背景
大量项目在使用logback记日志,有部分项目使用日志混乱,格式不统一,多数人搞不懂配置文件,导致配置错误,现在需要开发一套统一的、少配置的日志组件,方便使用。
二、设计思路
尽量采用0配置,无logback.xml
日志格式统一,方便后续日志分析系统
只有两个日志级别,一个是正常日志,一个是异常日志
提供log4j、jcl、logback、commons-log等桥接方案及版本兼容方案
提子线程、json格式化输出、map格式化、数组格式化、请求响应参数(供耗时)等便捷日志输出方法
支持redis、db、http自动开关配置****
新增日志类型(logger)
api采用流式结构,类似StringBuffer
三、概要设计
1、零配置
调研代码
java
static LoggerContext lc;
static {
lc = (LoggerContext) LoggerFactory.getILoggerFactory();
// 对应配置中的appender
ConsoleAppender ca = new ConsoleAppender();
ca.setContext(lc);
ca.setName("console");
// 格式
PatternLayoutEncoder pl = new PatternLayoutEncoder();
pl.setContext(lc);
pl.setPattern("%d{MMddHHmmss.SSS} [%thread] %-5level %logger{36} - %msg%n");
pl.start();
ca.setEncoder(pl);
ca.start();
// 对应配置中的logger
ch.qos.logback.classic.Logger rootLogger = lc.getLogger("com.test");
rootLogger.addAppender(ca);}
上面代码等价于下面的xml
%d{MMddHHmmss.SSS} [%thread] %-5level %logger{36} - %msg%n
由此可以随意把配置文件中的内容以代码形式编写,理论已经可以实现0配置。
2、输出路径
约定固定将日志输出到,相对路径log/xxx.yyyy-MM-dd-HH.log,其中xxx为logger的name