Log4j - 优先级值和参数名概念解释

标签 log4j logging

我的 log4j.xml :

 <appender name="B2BAPP" class="org.apache.log4j.RollingFileAppender">
     <param name="File" value="/LOGS/SAM/B2B_VJ.log"/>   
     <param name="Threshold" value="ERROR"/> 
     <param name="MaxFileSize" value="10000KB"/>
     <param name="MaxBackupIndex" value="10"/>
     <param name="Append" value="false"/>
     <layout class="org.apache.log4j.PatternLayout">
         <param name="ConversionPattern" value="%d{dd MMM yyyy HH:mm:ss,SSS} %5p [%c:%L] %m%n"/>
     </layout>      
</appender>

<logger name="com.sas">    
   <priority value="DEBUG"/>
   <appender-ref ref="B2BAPP"/>
</logger>

我想了解 的行为优先级值="调试"参数名称=“阈值”值=“调试” .

在我的记录器( com.sas )中,我设置了优先级值“DEBUG”,这个记录器的附加器是“B2BAPP”,在“B2BAPP”中,我将“阈值”定义为“错误”。

那么“com.sas”的日志级别将设置为“DEBUG”还是“ERROR”?

案例:

priority value="DEBUG" and param name="Threshold" value="ERROR"

priority value="ERROR" and param name="Threshold" value="DEBUG"



上述案例的输出是什么?它是如何工作的?

最佳答案

Logger组件接受日志记录指令( logger.debug()logger.error() 等调用)并将它们发送到适当的目的地到 Appender s。

您可以在 Logger 上设置“优先级”并指示它只接受某个级别的日志记录指令。这些级别是(按重要性升序排列):TRACE、DEBUG、INFO、WARN、ERROR 和 FATAL。

这样的配置:

<logger name="com.sas">
    <priority value="WARN" />
    ....
</logger>

指示com.sas logger 只接受具有 WARN 或更高重要性级别的级别(即 WARN、ERROR 和 FATAL)。

然后将日志记录发送到 Appender s。附加程序也可以配置为仅接受特定重要性级别的语句,高于某个“阈值”。

配置如下:
<appender name="B2BAPP" class="org.apache.log4j.RollingFileAppender">
   <param name="Threshold" value="ERROR"/> 
   ....
</appender>

告诉 appender 只接受 ERROR 重要性或更高级别的语句(即 ERROR 和 FATAL)。

So log level for "com.sas" would be set to "DEBUG" or "ERROR"?



在您的示例中,日志级别设置为 DEBUG。附加程序编写的内容与问题正交。

至于你的两个例子:

priority value="DEBUG" and param name="Threshold" value="ERROR"

priority value="ERROR" and param name="Threshold" value="DEBUG"



1. Logger 优先级设置为 DEBUG,appender 阈值设置为 ERROR 意味着记录器传递 DEBUG、INFO、WARN、ERROR 和 FATAL,但 appender 只接受 ERROR 和 FATAL,因此您只能在日志中获取 ERROR 和 FATAL。

2. Logger 优先级设置为 ERROR,appender 阈值设置为 DEBUG 意味着 logger 只传递 ERROR 和 FATAL,而 appender 接受 DEBUG、INFO、WARN、ERROR 和 FATAL。您再次只在日志中输入 ERROR 和 FATAL 。

但这只是一个不幸的案例。混合优先级和阈值可以为您提供一些不错的功能。例如...

... 假设您刚刚将一个应用程序置于暂存状态,并且您需要对其进行一段时间的监视,直到将其移至生产环境。您有一名开发人员和一名系统管理员进行监控。开发人员想要所有日志,而系统管理员很忙,只想查看错误。

你如何配置?这样的事情怎么样:
<appender name="developerLogs" class="org.apache.log4j.RollingFileAppender">
    <param name="File" value="/LOGS/SAM/developerLogs.log" />
    <param name="Threshold" value="DEBUG" />
    <param name="Append" value="false" />
    <layout class="org.apache.log4j.PatternLayout">
        <param name="ConversionPattern" value="%m%n"/>
    </layout>
</appender>

<appender name="sysAdminLogs" class="org.apache.log4j.RollingFileAppender">
    <param name="File" value="/LOGS/SAM/sysAdminLogs.log" />
    <param name="Threshold" value="ERROR" />
    <param name="Append" value="false" />
    <layout class="org.apache.log4j.PatternLayout">
        <param name="ConversionPattern" value="%m%n"/>
    </layout>
</appender>

<logger name="com.test">
    <priority value="DEBUG" />
    <appender-ref ref="developerLogs" />
    <appender-ref ref="sysAdminLogs" />
</logger>

如果您运行如下代码:
Logger logger = Logger.getLogger("com.test");

logger.debug("some debug statement");
logger.info("some info statement");
logger.warn("some warn statement");
logger.error("some error statement");
logger.fatal("some fatal statement");

您可以在 sysAdminLogs.log 中获得此信息:
some error statement
some fatal statement

这在 developerLogs.log :
some debug statement
some info statement
some warn statement
some error statement
some fatal statement

希望这个解释能更好地描述这些概念。

关于Log4j - 优先级值和参数名概念解释,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8653548/

相关文章:

java - hibernate 4 log4j 查看查询参数

logging - 登录scala

java - 如何获得实时日志分析

reactjs - 在 react webapp 中审计和时间记录用户行为的最佳解决方案?

jpa - 如何为 EclipseLink 正确设置 SQL 日志记录?

java - 将 Jersey 日志过滤器重定向到 logback

java - log4j:WARN 找不到记录器的附加程序(运行 jar 文件,而不是 Web 应用程序)

java - log4j GC的免费性能

java - JaCoCo 在设置 log4j.configurationFactory 系统属性后停止工作

java - 触发 SizeBasedTriggeringPolicy 时 Log4j Filepattern 不起作用