【问题标题】:What does threshold mean in Log4J?Log4J 中的阈值是什么意思?
【发布时间】:2011-02-25 16:36:33
【问题描述】:

我有一个类似下面的log4j 属性。 TextProcessor.log 中记录的所有内容都高于 WARN 级别。我不明白这里设置的调试阈值。有人能解释一下阈值的作用吗?

log4j.logger.TextProcessor=warn,TextProcessor 

log4j.appender.TextProcessor=org.apache.log4j.RollingFileAppender
log4j.appender.TextProcessor.File=C:/project/logs/TextProcessor.log
log4j.appender.TextProcessor.MaxFileSize=10MB
log4j.appender.TextProcessor.MaxBackupIndex=10
log4j.appender.TextProcessor.Threshold=debug
log4j.appender.TextProcessor.layout=org.apache.log4j.PatternLayout
log4j.appender.TextProcessor.layout.ConversionPattern=[%d] [%5p] (%F:%L) - %m%n

【问题讨论】:

标签: java logging log4j


【解决方案1】:

这里有两个东西:一个记录器和一个附加器。不幸的是,您为两者选择了相同的名称,这并不清楚。

记录器的最低级别设置为警告,这意味着您使用此记录器记录的所有未达到警告级别的内容都将被忽略。

一旦消息被记录器接受,它就会被发送到一个或多个附加程序(文件、控制台、邮件服务器等)。这些附加程序中的每一个都可以定义一个阈值。例如,您可以将控制台中的消息限制为错误,但接受日志文件中的警告消息。

【讨论】:

  • 对我来说“门槛”并不适合。我通过使用 xml 配置启动 log4j,在附加程序中它被称为“级别”,具有阈值的含义。我认为具有两个不同标签(标签,阈值)的相同概念(限制日志严重性)使其更难以理解(如果到目前为止我真的理解它的话)。但无论如何,我不是以英语为母语的人。
  • 为了完整起见,应该说 OP 的问题是 logger 的策略 (WARN) 比 Appender (DEBUG) 更具限制性,而且总是限制性更强的策略获胜。
  • Log4j 1.x 的阈值记录在哪里?
【解决方案2】:

阈值是要记录的消息的第二个过滤器

例如:

 log4j.logger.TextProcessor=Debug,TextProcessor , InfoLogger
 .
 .
 .
 log4j.appender.TextProcessor.Threshold=Error

如果 Logger 设置为 DEBUG 级别,并且 appender Threshold 设置为 Error,那么使用 appender TextProcessor 时只会记录错误和更高严重性的消息。

阈值的使用是,您可以定义具有不同阈值级别的不同附加程序,例如在上面提到的示例中,您还可以启用 InfoLogger 并启用 Info 级别消息日志记录

 log4j.logger.TextProcessor=Debug,TextProcessor , InfoLogger
 .
 .
 .
 log4j.appender.InfoLogger.Threshold=INFO

要了解级别,log4j 中有以下日志级别

FATAL: shows messages at a FATAL level only  
ERROR: Shows messages classified as ERROR and FATAL  
WARNING: Shows messages classified as WARNING, ERROR, and FATAL  
INFO: Shows messages classified as INFO, WARNING, ERROR, and FATAL  
DEBUG: Shows messages classified as DEBUG, INFO, WARNING, ERROR, and FATAL  
TRACE : Shows messages classified as TRACE,DEBUG, INFO, WARNING, ERROR, and FATAL
ALL : Shows messages classified as TRACE,DEBUG, INFO, WARNING, ERROR, and FATAL 
OFF : No log messages display

前往URL了解更多详情

【讨论】:

  • Log4J 在配置中使用“WARN”,而不是“WARNING”!!!!
【解决方案3】:

日志记录级别为TRACEDEBUGINFOWARNERRORFATAL。您将能够根据严重性选择在代码中的哪个级别记录什么。例如,您将能够记录方法的进入和退出,但可以选择在DEBUG 级别记录。这将帮助您调试代码,因为默认情况下它将在控制台上打印出来(默认控制台附加程序已打开)。在投入生产时,您可以将阈值提高到 ERROR,并防止应用程序在控制台或日志文件上打印出不太有用的详细信息。

【讨论】:

    【解决方案4】:

    为您提供从属性配置文件到日志消息流的简单映射。 (我隐藏了一些配置行以最小化)

    log4j.rootLogger=ALL, stdout
    log4j.logger.com.xyz=INFO, file
    
    log4j.appender.stdout=org.apache.log4j.ConsoleAppender
    log4j.appender.stdout.Threshold=DEBUG
    ...
    
    log4j.appender.file=org.apache.log4j.RollingFileAppender
    log4j.appender.file.Threshold=WARN
    ...
    

    要了解它是什么,您应该知道:

    • 检索到最左侧时,日志记录级别会增加:TRACE、DEBUG、INFO、WARN、ERROR 和 FATAL
    • 记录器从应用程序接受的最低记录级别。
    • appender 上的最低级别日志记录决定将写入的内容

    ** 继承和可加性有一些更复杂的事情,但您应该先从基本和简单的事情开始。

    【讨论】:

      猜你喜欢
      • 2016-12-26
      • 1970-01-01
      • 2011-08-12
      • 2017-06-11
      • 2018-03-05
      • 2023-03-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多