Apache Log4j2 是 Log4j 的升级,对其前身 Log4j 1.x进行了重大改进,并提供了Logback 中可用的许多改进,同时修复了 Logback 架构中的一些固有问题。
要求
Log4j2.13.0 及更高版本需要 Java 8。版本 2.4 到 2.12.1 需要 Java 7(Log4j 团队不再支持 Java 7)。某些功能需要可选的依赖项;这些功能的文档将指定所需的依赖项。
Log4j2 的优势
- 性能提升: 在多线程方案中,异步记录器 (异常)的吞吐量比 Log4j 1.x 和 Logback 高 18 倍,延迟低几个数量级。
- 支持多个接口: 虽然Log4j 2 API将提供最佳性能,但Log4j 2提供了对Log4j 1.2,SLF4J,Commons Logging 和 java.util.logging(JUL)API的支持。
- 自动重载配置: 参考Logback,与Logback一样,Log4j 2可以在修改时自动重新加载其配置。但与 Logback 不同的是,在重新配置发生时,它将在不丢失日志事件的情况下执行此操作。
- 无垃圾:在稳态日志记录期间,Log4j 2 在独立应用程序中是无垃圾的,在 Web 应用程序中是低垃圾。这减少了垃圾回收器的压力,并可以提供更好的响应时间性能。
更多详细转看官网:Log4j – Apache Log4j 2
配置Log4j2
在src
下创建一个 log4j2.xml 文件,将以下代码添加进入即可
<?xml version="1.0" encoding="UTF-8" ?> <!-- status="warn" 日志框架本身的输出日志级别,可以修改为debug monitorInterval="5" 自动加载配置文件的间隔时间,不低于 5 秒;生产环境中修改配置文件,是热更新,无需重启应用 --> <configuration status="warn" monitorInterval="5"> <!-- 集中配置属性进行管理 使用时通过:${name} --> <properties> <property name="LOG_HOME">D:/logs</property> </properties> <!-- 日志处理 --> <Appenders> <!-- 控制台输出 appender,SYSTEM_OUT输出黑色,SYSTEM_ERR输出红色 --> <Console name="Console" target="SYSTEM_OUT"> <PatternLayout pattern="%d{HH:mm:ss.SSS} [%t] [%-5level] %c{36}:%L --- %m%n" /> </Console> <!-- 日志文件输出 appender --> <File name="file" fileName="${LOG_HOME}/myfile.log"> <PatternLayout pattern="[%d{yyyy-MM-dd HH:mm:ss.SSS}] [%-5level] %l %c{36} - %m%n" /> </File> <!-- 使用随机读写流的日志文件输出 appender,性能提高 --> <RandomAccessFile name="accessFile" fileName="${LOG_HOME}/myAcclog.log"> <PatternLayout pattern="[%d{yyyy-MM-dd HH:mm:ss.SSS}] [%-5level] %l %c{36} - %m%n" /> </RandomAccessFile> <!-- 按照一定规则拆分的日志文件的appender --> <!-- 拆分后的文件 --> <!-- filePattern="${LOG_HOME}/$${date:yyyy-MM-dd}/myrollog-%d{yyyy-MM-dd-HH-mm}-%i.log"> --> <RollingFile name="rollingFile" fileName="${LOG_HOME}/myrollog.log" filePattern="${LOG_HOME}/$${date:yyyy-MM-dd}/myrollog-%d{yyyy-MM-dd}-%i.log"> <!-- 日志级别过滤器 --> <ThresholdFilter level="debug" onMatch="ACCEPT" onMismatch="DENY" /> <!-- 日志消息格式 --> <PatternLayout pattern="[%d{yyyy-MM-dd HH:mm:ss.SSS}] [%-5level] %l %c{36} - %msg%n" /> <Policies> <!-- 在系统启动时,出发拆分规则,生产一个新的日志文件 --> <OnStartupTriggeringPolicy /> <!-- 按照文件大小拆分,10MB --> <SizeBasedTriggeringPolicy size="2MB" /> <!-- 按照时间节点拆分,规则根据filePattern定义的 --> <TimeBasedTriggeringPolicy /> </Policies> <!-- 在同一个目录下,文件的个限定为 30个,超过进行覆盖 --> <DefaultRolloverStrategy max="10" /> </RollingFile> </Appenders> <!-- logger 定义 --> <Loggers> <!-- 使用 rootLogger 配置 日志级别 level="trace" --> <Root level="trace"> <!-- 指定日志使用的处理器 --> <!-- <AppenderRef ref="Console" />--> <AppenderRef ref="file" /> <AppenderRef ref="rollingFile" /> <AppenderRef ref="accessFile" /> </Root> </Loggers> </configuration>
完成以上步骤后,接下来讲解如何使用 log4j2
Log4j2 的使用
- 导包
import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger;
- 定义一个成员字段
// 获取Logger对象,调用方法记录日志 private static Logger logger = LogManager.getLogger(Demo.class.getName());
- 编写代码
网络异常,图片无法展示
|
日志级别
Log4j2中日志有六个级别(level):
trace
:追踪,是最低的日志级别,相当于追踪程序的执行,一般不怎么使用debug
:调试,一般在开发中,都将其设置为最低的日志级别info
:信息,输出重要的信息,使用较多warn
:警告,有些时候,虽然程序不会报错,但是还是需要告诉程序员的error
:错误,这个在开发中也挺常用的fatal
:严重错误,这个一旦发生,程序基本上也要停止了