Log4j模式不包含数据

7gyucuyw  于 2023-05-06  发布在  其他
关注(0)|答案(1)|浏览(220)

我正在为Java编写日志,并使用log4j。这是我的FileRollOver配置文件

status = warn
property.filename = $${date:YYYY-MM-dd}

# Rotate log file
appender.rolling.type = RollingFile
appender.rolling.name = LogToRollingFile
appender.rolling.fileName = ../app_log/service/app-java-${date:YYYY-MM-dd}.log
appender.rolling.filePattern = app_log/service/app-java-${date:YYYY-MM-dd}.log.gz
appender.rolling.layout.type = PatternLayout
appender.rolling.layout.pattern = %d{yyyy-MM-dd HH:mm:ss} [%-5p] %M: %m%n
appender.rolling.policies.type = Policies
#appender.rolling.policies.time.type = OnStartupTriggeringPolicy
appender.rolling.policies.time.type = TimeBasedTriggeringPolicy
appender.rolling.policies.time.interval=1
appender.rolling.policies.size.type = SizeBasedTriggeringPolicy
appender.rolling.policies.time.modulate = true
appender.rolling.policies.size.size=10MB
appender.rolling.strategy.type = DefaultRolloverStrategy
appender.rolling.strategy.max = 10

#logger specific configuration
loggers
logger.name=rolling
logger.additivity = true
logger.appenderRefs = rolling
logger.appenderRef.rolling.ref = LogToRollingFile
logger.appenderRef.rolling.stdout.ref = STDOUT

#root logger configuration
rootLogger.level = INFO
#rootLogger.appenderRef.stdout.ref = LogToConsole
rootLogger.appenderRef.stdout.ref = LogToRollingFile

配置就像一个新的日志文件,应该在每个新的一天创建。但是当我运行时,它会抛出这个异常。

2023-05-05 14:37:39,819 main ERROR Could not create plugin of type class org.apache.logging.log4j.core.appender.RollingFileAppender for element RollingFile: java.lang.IllegalStateException: Pattern does not contain a date java.lang.IllegalStateException: Pattern does not contain a date

和/或

2023-05-05 14:37:39,823 main ERROR Unable to invoke factory method in class org.apache.logging.log4j.core.appender.RollingFileAppender for element RollingFile: java.lang.IllegalStateException: No factory method found for class org.apache.logging.log4j.core.appender.RollingFileAppender java.lang.IllegalStateException: No factory method found for class org.apache.logging.log4j.core.appender.RollingFileAppender

虽然我的文件名中有日期,但无论如何都没有工作。会出什么问题呢?PS:我使用IntelliJ Idea作为IDE,它是一个Gradle项目。

oknrviil

oknrviil1#

在Log4j 2.x Core中有两种占位符(参见:this question):

  • %d{...}这样的模式,它从依赖于上下文的对象中提取一些属性,
  • ${date:...}这样的查找,它从LogEvent中提取一些属性。

虽然现在它们基本相同,但filePattern属性需要包含日期模式,而不是查找。
只需用途:

appender.rolling.filePattern = app_log/service/app-java-%d{yyyy-MM-dd}.%i.log.gz

同时删除appender.rolling.fileName并将DefaultRolloverStrategy更改为DirectWriteRolloverStrategy,因为前者不支持对fileNamefilePattern使用相同的值。

备注:您可能希望使用yyyy而不是YYYY,因为后者的意思是“基于周的年”,是一种由周组成的年。例如,2023-01-01是基于周的2022年的一部分。

我添加到模式中的%i对于基于大小的旋转是必需的。

相关问题