这是我的log4j.properties
文件
# Set loggers' levels
log4j.rootLogger=warn, trace_file
# Appender
log4j.appender.trace_file=org.apache.log4j.RollingFileAppender
log4j.appender.trace_file.Append=true
log4j.appender.trace_file.File=log/myLog.log
log4j.appender.trace_file.MaxFileSize=10MB
log4j.appender.trace_file.MaxBackupIndex=50
# PatternLayout
log4j.appender.trace_file.layout=org.apache.log4j.PatternLayout
log4j.appender.trace_file.layout.ConversionPattern=%d [%p] (%F:%L) %m%n
# Classes
log4j.logger.my_package=info, trace_file
我想要的是什么:
my.package
的{{1}}的日志请求存储至少trace_file
级INFO
trace_file
中存储来自所有其他记录器的日志请求,如果它至少为WARN
级别我的配置不起作用。如果my.package
引发级别WARN
的日志请求,则此日志请求将被写入两次。如果我使用两个单独的appender,则没有问题。
我错过了什么?
答案 0 :(得分:6)
尝试从my_package记录器语句中删除“trace_file”指令。
答案 1 :(得分:4)
更改
log4j.logger.my_package=info, trace_file
到
log4j.logger.my_package=info
默认情况下,Appender从父记录器继承,因此通过为根记录器和trace_file
指定my_package
,您告诉它执行两次。
答案 2 :(得分:4)
我同意Gevorg。它可能是一个可加性问题。
使用log4j.properties文件的人:
添加log4j.additivity.com.example.package=false
。(将org.hibernate替换为您需要的任何包)
使用基于log4j.xml的配置的人:
<logger name="com.example.package" additivity="false">
....
</logger>
答案 3 :(得分:1)
您错过了rootLogger
。
来自my_package
的警告由trace_file
通过root logguer log4j.rootLogger=warn, trace_file
捕获,然后由同一个appender通过log4j.logger.my_package=info, trace_file
我想当你创建第二个appender时,你没有将它指定给rootLogger
,是吗?
或者,您只能更改从root继承的级别并保留相同的appender
log4j.logger.my_package=info
答案 4 :(得分:1)
通过以下方式防止appender-additivity:
log4j.additivity.my_package =假
请参阅http://logging.apache.org/log4j/1.2/manual.html,“Appenders and Layouts”部分..
引用:
Appender可加性 记录器C的日志语句的输出将转到C及其中的所有appender 祖先。这就是“appender additivity”一词的含义。
但是,如果记录器C的祖先,比如P,将additivity标志设置为false,那么 C的输出将被定向到C中的所有appender及其祖先和 包括P但不包括P的任何祖先中的追加者。
记录器默认情况下将其可加性标志设置为true。
答案 5 :(得分:1)
这看起来像是一个可加性问题。
我不熟悉属性文件配置,但在定义记录器时应该有additivity
标志选项。将其设置为false
可以解决问题。此外,通过使用xml配置,您可以利用log4j的Filter
选项,该选项在属性文件中不可用。
应该是这样的:log4j.logger.my_package.additivity = false
最后,如果您之前没有听说过logback,请查看