log4j2是Java的日志工具log4j的升级版,它继承了log4j的优点的同时对API进行了一些改变
结构
log4j2的主要类图:
logger的层次
和普通的System.out.println相比,日志工具的首要优点就在于它能够禁用某些日志语句的同时允许其他日志语句不受阻碍的输出。
这在log4j1.x中是通过各个logger之间的关系维持的,而在log4j2.x中则是通过loggerConfig之间的关系进行维持的。
在log4j2.x中,logger和loggerConfig是命名实体,它们的命名是大小写敏感并且遵循类似于Java的包名的层次规则:
即名为X.Y的logger是名为X的logger的子级。
因此,我们可以使用以下两种方法获取顶层logger:
Logger logger = LogManager.getLogger(LogManager.ROOT_LOGGER_NAME);
Logger logger = LogManager.getRootLogger();
LoggerContext
LoggerContext充当日志记录系统的锚点。但是,根据具体情况,在应用程序中有多个活动LoggerContext是可能的。
Configuration
每个LoggerContext都有一个被激活的Configuration。该Configuration包含所有的Appender、上下文范围的 Filter、LoggerConfig以及对StrSubstitutor的引用。在重新配置期间,将存在两个配置对象。一旦所有记录器被重定向到新配置,旧配置将停止并丢弃。
Logger
Logger是通过调用LogManager.getLogger被创建的。Logger本身并不执行任何直接操作。
需要注意的是,如果创建时使用的是相同的字符串为Logger命名,那么获得的将是相同的Logger。
Logger x = LogManager.getLogger("wombat");
Logger y = LogManager.getLogger("wombat");
//输出true
System.out.println(x.equals(y));
LoggerConfig
LoggerConfig对象在Logger使用配置进行声明时被创建,它包含了一系列的Filter,并且包含对应用于处理事件的一组Appender的引用。
日志等级
- TRACE
- DEBUG
- INFO
- WARN
- ERROR
- FATAL
当然log4j2也支持用户自定义日志等级。
使用示例
配置方式
log4j主要有4