我正在为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项目。
1条答案
按热度按时间oknrviil1#
在Log4j 2.x Core中有两种占位符(参见:this question):
%d{...}
这样的模式,它从依赖于上下文的对象中提取一些属性,${date:...}
这样的查找,它从LogEvent
中提取一些属性。虽然现在它们基本相同,但
filePattern
属性需要包含日期模式,而不是查找。只需用途:
同时删除
appender.rolling.fileName
并将DefaultRolloverStrategy
更改为DirectWriteRolloverStrategy
,因为前者不支持对fileName
和filePattern
使用相同的值。备注:您可能希望使用
yyyy
而不是YYYY
,因为后者的意思是“基于周的年”,是一种由整周组成的年。例如,2023-01-01是基于周的2022年的一部分。我添加到模式中的
%i
对于基于大小的旋转是必需的。