- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我有一个 log4J 设置,其中根记录器应该将 ERROR 级别及更高级别的消息记录到控制台,另一个记录器将所有内容记录到系统日志。
log4j.properties 是:
# Root logger option
log4j.rootLogger=ERROR,R
log4j.appender.R=org.apache.log4j.ConsoleAppender
log4j.appender.R.layout=org.apache.log4j.PatternLayout
log4j.appender.R.layout.ConversionPattern=%d %p %t %c - %m%n
log4j.logger.SGSearch=DEBUG,SGSearch
log4j.appender.SGSearch=org.apache.log4j.net.SyslogAppender
log4j.appender.SGSearch.SyslogHost=localhost
log4j.appender.SGSearch.Facility=LOCAL6
log4j.appender.SGSearch.layout=org.apache.log4j.PatternLayout
log4j.appender.SGSearch.layout.ConversionPattern=[%-5p] %m%n
在我的代码中
private static final Logger logger = Logger.getLogger("SGSearch");
.
.
.
logger.info("Commencing snapshot index [" + args[1] + " -> " + args[2] + "]");
发生的事情是我获得了所有日志记录级别的控制台日志记录。似乎正在发生的是 SGSearch 的级别以某种方式覆盖了为根记录器设置的级别。我想不通。
我已经确认 Log4J 正在读取我认为是的属性文件,而不是其他(通过 -Dlog4j.debug
选项)
最佳答案
Log4j 链接的工作方式有点违反直觉(至少对我而言)。参见 the log4j manual .如果请求级别等于或高于最特定匹配记录器的阈值,则接受。一旦请求被接受,它就会由完整的祖先链处理,而不管他们的阈值如何!
要抑制链接行为,添加:
log4j.additivity.SGSearch=false
这将导致记录器 SGSearch 处理的请求不再向上传递。
另一个建议:不要将您的记录器和追加器命名为相同的名称,因为在将来的某个时候您或您的同事会混淆它们。记录器名称应指示处理哪种类型的日志记录,附加程序名称应指定日志记录的位置。所以在这种情况下,我认为“SGSearch”可能是记录器名称,而附加程序应该被称为“LocalSysLog”之类的东西。
顺便说一句:在我看来,您通过使用高阈值限制根记录器并针对特定记录器降低它来做正确的事情。这避免了嘈杂的图书馆造成的困惑(Apache 有一些臭名昭著的图书馆)。
关于java - log4j rootLogger 似乎继承了其他记录器的日志级别。为什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2453010/
我有一个使用 log4j2 进行日志记录的 Maven 项目。我想覆盖 RootLogger 的模式。 这是我的 log4j2.properties 文件: status = debug name=
如何使用 rootlogger = debug, stdout, logfile 配置 log4j.properties 和 org.apache.httpclient = debug 哪个进入日志文
我想在记录到文件时禁用到控制台的输出。请参阅下面的配置文件: log4j.rootLogger=info,stdout log4j.appender.stdout=org.apache.log4j.C
我已经为我需要的所有日志文件定义了附加程序。因此,我认为 rootLogger 不需要附加程序,因为 rootLogger 中没有任何内容可登录。因此,我将 log4j.properties 中的行更
我有一个 log4J 设置,其中根记录器应该将 ERROR 级别及更高级别的消息记录到控制台,另一个记录器将所有内容记录到系统日志。 log4j.properties 是: # Root logger
为什么是Log4j rootLogger 在我的应用程序中没有根据级别过滤日志事件?在我的 log4j.properties 中,我有几个记录器: log4j.rootLogger=info,stdo
java如何在运行时动态开启或关闭log4j2中rootLogger的一个appender? 例如,我想禁用 Console Appender: ...
log4j.properties 文件中的 log4j.rootLogger 属性有何意义?如果我不使用此属性会发生什么? 示例: # Set root logger level to DEBUG a
log4j.properties文件中log4j.rootLogger属性的意义是什么?如果我不使用此属性会怎样? 示例: # Set root logger level to DEB
我正在尝试诊断我的 Web 应用程序中的生产内存泄漏。该应用程序是在 Tomcat 7 和 mySQL 上运行的 GWT 应用程序,在 Debian 上运行 OpenJDK 1.6.0_18。 我启动
我是一名优秀的程序员,十分优秀!