Log4j2 日志
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
:严重错误,这个一旦发生,程序基本上也要停止了