Log4j自带了trace,debug,info.warn,error,fatal几个日志级别。
由于项目需要拆分业务和系统日志,而我又想偷懒,所以决定在log4j日志框架上增加自定义的日志级别专门用于业务日志输出。需要增加的日志级别定为audit,在log4j所有自带日志级别之上。
Log4j官方推荐的增加自定义的日志级别的方法是“继承org.apache.log4j.Level类”,具体的可以参考log4j中的示例XLevel。由于系统开发时不直接使用Log4j,而是通过slf4j调用log4j,官方推荐的方法行不通,所以决定修改log4j和slf4j相关源代码。
Log4j源代码修改点如下:
org.apache.log4j.Logger添加audit方法
public void audit(Object message) { if (repository.isDisabled(Level.AUDIT_INT)) { return; } if (Level.AUDIT.isGreaterOrEqual(this.getEffectiveLevel())) { forcedLog(FQCN, Level.AUDIT, message, null); } }
org.apache.log4j.Priority类添加AUDIT_INT属性
public final static int AUDIT_INT = 60000; //日志级别大于log4j包含的所有日志级别,便于后期通过Threshold属性过滤日志
org.apache.log4j.Level类添加AUDIT相关属性和方法
public static final Level AUDIT = new Level(AUDIT_INT, "AUDIT", 0);public static Level toLevel(int val, Level defaultLevel) { switch(val) { case ALL_INT: return ALL; case AUDIT_INT: return Level.AUDIT; case DEBUG_INT: return Level.DEBUG; case INFO_INT: return Level.INFO; case WARN_INT: return Level.WARN; case ERROR_INT: return Level.ERROR; case FATAL_INT: return Level.FATAL; case OFF_INT: return OFF; case TRACE_INT: return Level.TRACE; default: return defaultLevel; } }
至此Log4j修改完成,下面修改slf4j相关源代码。slf4j需要修改slf4j-api和slf4j-log4j12两个包 继续阅读