Log4j2框架适配器
警告
由于log4j2是插件的机制,为了避免log4j2提前加载到自己的插件,请把log4j2配置文件的pattern
中的m/msg/message
改成tm/tmsg/tmessage
如果你不想改这个,还有一个办法,就是把tlog的依赖包在pom文件里提到log4j2依赖包的前面。
# 同步日志
提示
log4J2由于是通过插件形式实现的,log4J2有自动扫描插件的功能。所以在同步日志情况下无需对配置文件做任何更改就能生效。
下面仅仅给出log4j2同步日志配置文件的示例,其实并不需要改动:
<?xml version="1.0" encoding="UTF-8"?>
<configuration status="WARN" monitorInterval="30">
<!--先定义所有的appender-->
<appenders>
<!--控制台日志-->
<console name="Console" target="SYSTEM_OUT">
<!--输出日志的格式-->
<PatternLayout pattern="%date{HH:mm:ss.SSS} %-5level [%thread] %logger{36} - %tmsg%n"/>
</console>
<!--文件日志-->
<!--同步日志-->
<RollingFile name="RollingFileInfo" fileName="./logs/log4j2-sync-rolling.log"
filePattern="${sys:user.home}/logs/$${date:yyyy-MM}/info-%d{yyyy-MM-dd}-%i.log">
<!--控制台只输出level及以上级别的信息(onMatch),其他的直接拒绝(onMismatch)-->
<ThresholdFilter level="info" onMatch="ACCEPT" onMismatch="DENY"/>
<PatternLayout pattern="%date{HH:mm:ss.SSS} %-5level [%thread] %logger{36} - %tmsg%n"/>
<Policies>
<TimeBasedTriggeringPolicy/>
<SizeBasedTriggeringPolicy size="100 MB"/>
</Policies>
</RollingFile>
<!--同步日志-->
<File name="SyncFile" fileName="./logs/log4j2-sync.log" append="false" >
<PatternLayout pattern="%date{HH:mm:ss.SSS} %-5level [%thread] %logger{36} - %tmsg%n"/>
</File>
</appenders>
<!--然后定义logger,只有定义了logger并引入的appender,appender才会生效-->
<loggers>
<root level="INFO">
<appender-ref ref="Console"/>
<appender-ref ref="SyncFile"/>
<appender-ref ref="RollingFileInfo"/>
</root>
</loggers>
</configuration>
# 异步日志
提示
log4J2由于是通过插件形式实现的,log4J2有自动扫描插件的功能。在异步日志情况下也无需对配置文件做任何更改就能生效。
但是异步日志里,由于log4j2是发送到队列里,所以写日志的线程和业务线程之间并无从属关系,为了能让log4j2在任何的情况下就能获取到业务线程传入的标签值,在异步情况下你需要在启动项里配置以下代码:
public static void main(String[] args) {
System.setProperty("log4j2.isThreadContextMapInheritable", Boolean.TRUE.toString());
SpringApplication.run(RunnerApplication.class, args);
}
如果你不是Springboot项目,不方便在启动项代码里进行设置,这个参数也可以设置在jvm参数里:
-Dlog4j2.isThreadContextMapInheritable=true
下面仅仅给出log4j2异步日志配置文件的示例,其实并不需要改动:
<?xml version="1.0" encoding="UTF-8"?>
<configuration status="WARN" monitorInterval="30">
<!--先定义所有的appender-->
<appenders>
<!--控制台日志-->
<console name="Console" target="SYSTEM_OUT">
<!--输出日志的格式-->
<PatternLayout pattern="%date{HH:mm:ss.SSS} %-5level [%thread] %logger{36} - %tmsg%n"/>
</console>
<!--文件日志-->
<RollingFile name="RollingFileInfo" fileName="./logs/log4j2-async-rolling.log"
filePattern="${sys:user.home}/logs/$${date:yyyy-MM}/info-%d{yyyy-MM-dd}-%i.log">
<!--控制台只输出level及以上级别的信息(onMatch),其他的直接拒绝(onMismatch)-->
<ThresholdFilter level="info" onMatch="ACCEPT" onMismatch="DENY"/>
<PatternLayout pattern="%date{HH:mm:ss.SSS} %-5level [%thread] %logger{36} - %tmsg%n"/>
<Policies>
<TimeBasedTriggeringPolicy/>
<SizeBasedTriggeringPolicy size="100 MB"/>
</Policies>
</RollingFile>
<!--异步日志:一 先声明同步文件-->
<File name="AsyncLogFile" fileName="./logs/log4j2-async.log" append="false" >
<PatternLayout pattern="%date{HH:mm:ss.SSS} %-5level [%thread] %logger{36} - %tmsg%n"/>
</File>
<!--异步日志:二 使用Async配置异步 -->
<Async name="AsyncFile">
<AppenderRef ref="AsyncLogFile"/>
</Async>
<!--异步输出到控制台-->
<Async name="AsyncConsole">
<AppenderRef ref="Console"/>
</Async>
<!--异步输出到滚动日志-->
<Async name="AsyncRolling">
<AppenderRef ref="RollingFileInfo"/>
</Async>
</appenders>
<!--然后定义logger,只有定义了logger并引入的appender,appender才会生效-->
<loggers>
<root level="INFO">
<appender-ref ref="AsyncFile"/>
<appender-ref ref="AsyncConsole"/>
<appender-ref ref="AsyncRolling"/>
</root>
</loggers>
</configuration>
帮助我们改善文档 (opens new window)
last update: 2022/09/21, 16:00:22