赞
踩
1. 排除默认的 logback 依赖,同时引入log4j2
<!-- 排除默认的 logback 依赖--> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter</artifactId> <exclusions> <exclusion> <artifactId>spring-boot-starter-logging</artifactId> <groupId>org.springframework.boot</groupId> </exclusion> </exclusions> </dependency> <!-- 引入log4j2依赖 disruptor 异步日志需要--> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-log4j2</artifactId> </dependency> <dependency> <groupId>com.lmax</groupId> <artifactId>disruptor</artifactId> </dependency>
2. 配置全局使用log4j2 异步日志
在 resources 目录增加文件: log4j2.component.properties,内容如下:
# 设置异步日志系统属性
log4j2.contextSelector=org.apache.logging.log4j.core.async.AsyncLoggerContextSelector
3. 增加日志打印配置文件
在 resources 目录增加文件: log4j2.xml,内容如下:
<?xml version="1.0" encoding="UTF-8"?> <configuration monitorInterval="60"> <Properties> <!-- 日志输出格式 --> <Property name="log.pattern" value="%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{30} - [%method,%line] - %msg%n"/> <!-- 活动文件的大小 --> <Property name="max.file.size" value="524MB"/> <Property name="logRootDir" value="${sys:logFile.dir}"/> <!-- 保留的归档文件的最大数量 --> <Property name="rolloverStrategy.max" value="30"/> </Properties> <Appenders> <!-- 控制台输出 --> <Console name="stdoutAppender" target="SYSTEM_OUT"> <!--输出日志的格式--> <PatternLayout pattern="${log.pattern}" charset="UTF-8"/> </Console> <RollingFile name="rollingFileAppender" fileName="${logRootDir}/app.log" filePattern="${logRootDir}/app-%d{yyyy-MM-dd}.%i.log"> <PatternLayout pattern="${log.pattern}" charset="UTF-8"/> <Policies> <TimeBasedTriggeringPolicy/> <SizeBasedTriggeringPolicy size="${max.file.size}"/> </Policies> <DefaultRolloverStrategy max="${rolloverStrategy.max}"/> </RollingFile> <RollingFile name="callListLogFileAppender" fileName="${logRootDir}/callist.log" filePattern="${logRootDir}/callist-%d{yyyyMMdd}.%i.log"> <Policies> <TimeBasedTriggeringPolicy/> <SizeBasedTriggeringPolicy size="${max.file.size}"/> </Policies> <DefaultRolloverStrategy max="200"/> </RollingFile> </Appenders> <Loggers> <Logger name="CallList" additivity="false"> <appender-ref ref="callListLogFileAppender"/> </Logger> <Root level="INFO" includeLocation="true"> <appender-ref ref="rollingFileAppender"/> <appender-ref ref="stdoutAppender"/> </Root> <!-- 下面配置一些第三方包的日志过滤级别,用于避免刷屏 --> <Logger name="org.hibernate" level="WARN" includeLocation="true"/> <Logger name="org.springframework" level="INFO" includeLocation="true"/> <Logger name="com.opensymphony" level="WARN" includeLocation="true"/> <Logger name="org.apache" level="INFO" includeLocation="true"/> <Logger name="org.mybatis" level="INFO" includeLocation="true"/> </Loggers> </configuration>
优点
缺点
参考
https://zhuanlan.zhihu.com/p/105428561
1. 全部日志采用异步模式
如上次增加 log4j2.component.properties 配置异步 AsyncLoggerContextSelector, 然后 log4j2.xml 和同步的配置一样,不需要再使用 AsAsyncLogger 或 AsyncRoot。
2. 混合同步异步模式
不需要配置 AsyncLoggerContextSelector,直接在 log4j2.xml 混合 Logger 和 AsAsyncLogger。
RollingRandomAccessFile 在异步日志使用中,性能要好与 RollingFile 。使用方式和RollingFile差不多 ,除了始终缓冲的默认缓冲区大小为256 * 1024字节(可以在启动时候指定更改,但不会动态变化了)。
https://springframework.guru/asynchronous-logging-with-log4j-2/
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。