java - log4j RollingFileAppender 性能
问题描述
我需要大量记录以进行进一步分析,因此当文件滚动时,整个流程会卡住一段时间,执行以下操作:
"org.springframework.kafka.KafkaListenerEndpointContainer#1-1-C-1" - Thread t@56
java.lang.Thread.State: BLOCKED
at org.apache.logging.log4j.core.appender.rolling.RollingFileManager.checkRollover(RollingFileManager.java:174)
- waiting to lock <2afdff68> (a org.apache.logging.log4j.core.appender.rolling.RollingFileManager) owned by "SrpResultsProcessor-8" t@90
at org.apache.logging.log4j.core.appender.RollingFileAppender.append(RollingFileAppender.java:280)
at org.apache.logging.log4j.core.config.AppenderControl.tryCallAppender(AppenderControl.java:156)
at org.apache.logging.log4j.core.config.AppenderControl.callAppender0(AppenderControl.java:129)
at org.apache.logging.log4j.core.config.AppenderControl.callAppenderPreventRecursion(AppenderControl.java:120)
at org.apache.logging.log4j.core.config.AppenderControl.callAppender(AppenderControl.java:84)
at org.apache.logging.log4j.core.config.LoggerConfig.callAppenders(LoggerConfig.java:447)
at org.apache.logging.log4j.core.config.LoggerConfig.processLogEvent(LoggerConfig.java:432)
at org.apache.logging.log4j.core.config.LoggerConfig.log(LoggerConfig.java:416)
at org.apache.logging.log4j.core.config.LoggerConfig.log(LoggerConfig.java:402)
at org.apache.logging.log4j.core.config.AwaitCompletionReliabilityStrategy.log(AwaitCompletionReliabilityStrategy.java:63)
at org.apache.logging.log4j.core.Logger.logMessage(Logger.java:146)
at org.apache.logging.log4j.spi.AbstractLogger.logMessageSafely(AbstractLogger.java:2091)
at org.apache.logging.log4j.spi.AbstractLogger.logMessage(AbstractLogger.java:2005)
at org.apache.logging.log4j.spi.AbstractLogger.logIfEnabled(AbstractLogger.java:1876)
at org.apache.logging.slf4j.Log4jLogger.debug(Log4jLogger.java:124)
...
这是我的 yaml 配置:
Configuration:
name: default
Appenders:
RollingFile:
- name: stdout
fileName: ../logs/${component.name}.log
filePattern: "../logs/archive/${component.name}_%d{yyyy-MM-dd}_%i.log.zip"
PatternLayout:
pattern: "%d{ISO8601} %-5level [%t] %logger{36} - %msg%n"
Policies:
SizeBasedTriggeringPolicy:
size: 300 MB
DefaultRollOverStrategy:
max: 20
Delete:
basePath: ../logs
maxDepth: 2
IfFileName:
glob: "*/${component.name}_*.log.zip"
IfAccumulatedFileCount:
exceeds: 50
- name: stderr
fileName: ../logs/${component.name}.err
filePattern: "../logs/archive/${component.name}_%d{yyyy-MM-dd}_%i.err.zip"
PatternLayout:
pattern: "%d{ISO8601} %-5level [%t] %logger{36} - %msg%n"
Policies:
SizeBasedTriggeringPolicy:
size: 300 MB
DefaultRollOverStrategy:
max: 5
Delete:
basePath: ../logs
maxDepth: 2
IfFileName:
glob: "*/${component.name}_*.err.zip"
IfAccumulatedFileCount:
exceeds: 10
...
有什么想法可以提高“滚动”的性能吗?
解决方案
-DLog4jContextSelector=org.apache.logging.log4j.core.async.AsyncLoggerContextSelector
推荐阅读
- tsql - 理解t-sql中AND和WHERE的逻辑
- java - 从数据库中删除一个简单的行
- export - 导出大型数据集
- css - Webpack 不尊重导入顺序
- ios - 如何使用 swift 4 显示这样的 collectionView?
- delphi - Delphi 创建用户表单
- ruby-on-rails - nil:NilClass 的未定义方法“model_name”
- javascript - 如何从诺基亚健康 API 读取温度?
- android - 您如何检测用户何时关闭 Android 中的无障碍服务?
- python-3.x - python mongo db / 如何有效地修改和删除字典中的列表?