Java LOG4J-在日志中避免两次相同的消息
这是我的Java LOG4J-在日志中避免两次相同的消息,java,log4j,Java,Log4j,这是我的log4j.properties文件 #设置记录器的级别 log4j.rootLogger=警告,跟踪文件 #追加器 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=10M
log4j.properties
文件
#设置记录器的级别
log4j.rootLogger=警告,跟踪文件
#追加器
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
#图案布局
log4j.appender.trace_file.layout=org.apache.log4j.patternalyout
log4j.appender.trace_file.layout.ConversionPattern=%d[%p](%F:%L)%m%n
#班级
log4j.logger.my_package=info,trace_文件
我想要的是:
- 将来自
的日志请求至少以my.package
级别存储在INFO
trace\u文件中
- 仅当日志请求至少为
级别时,才将来自所有其他记录器的日志请求存储在WARN
trace\u文件中
my.package
引发级别为WARN
的日志请求,则此日志请求将被写入两次。如果我使用两个独立的appender,就没有问题了
我缺少什么?尝试从my_package logger语句中删除“trace_file”指令。更改
log4j.logger.my_package=info, trace_file
到
默认情况下,附加程序是从父记录器继承的,因此,通过为根记录器和
my\u包
指定trace\u file
,您可以告诉它执行两次 您缺少rootLogger
的角色
通过根logguerlog4j.rootLogger=warn,trace_file
,然后由同一个附加程序通过log4j.logger.my_package=info,trace_file
捕获来自my_package
的警告
我想,当您创建第二个appender时,您没有将其指定给根记录器
,是吗
或者,您可以只更改从root继承的级别,并保留相同的appender
log4j.logger.my_package=info
通过以下方式防止追加器可加性: log4j.additivity.my_package=false 请参阅“附录和布局”一节 引述: Appender可加性 记录器C的log语句的输出将发送到C中的所有追加器及其 祖先。这就是术语“附加可加性”的含义 但是,如果记录器C的祖先(例如p)的additivity标志设置为false,则 C的输出将被定向到C中的所有附加器及其祖先直到和 包括P,但不包括P的祖先中的附加语 默认情况下,记录器的可加性标志设置为true
这看起来像是一个可加性问题 我不熟悉属性文件配置,但在定义记录器时,应该有一个
additivity
标志选项。将其设置为false
可以解决此问题。另外,通过使用xml配置,您可以利用属性文件中不可用的log4j的Filter
选项
它应该是这样的:log4j.logger.my_package.additivity=false
最后,看看你以前是否从未听说过它我同意Gevorg的观点。这可能是一个可加性问题 使用log4j.properties文件的用户: 添加
log4j.additivity.com.example.package=false
(用您需要的任何包替换org.hibernate)
使用基于log4j.xml的配置的人:
<logger name="com.example.package" additivity="false">
....
</logger>
....
<logger name="com.example.package" additivity="false">
....
</logger>