题 Log4j - 优先级值和参数名称概念说明


我的 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>

我想了解一下这种行为 优先值=“DEBUG” 和 param name =“Threshold”value =“DEBUG”

在我的记录器中(com.sas)我已设置优先级值“DEBUG”,此记录器的appender为“B2BAPP”,而在“B2BAPP”中,我将“阈值”定义为“ERROR”。

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

案例: 

priority value =“DEBUG”和param name =“Threshold”value =“ERROR”

priority value =“ERROR”和param name =“Threshold”value =“DEBUG”

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


16
2017-12-28 08:29


起源




答案:


Logger 组件接受记录指令(logger.debug()logger.error() 等电话)并将它们发送到适当的目的地 Appender秒。

您可以在上面设置“优先级” Logger 并指示它只接受某个级别的记录指令。级别(按重要性递增顺序):TRACE,DEBUG,INFO,WARN,ERROR和FATAL。

像这样的配置:

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

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

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

配置如:

<appender name="B2BAPP" class="org.apache.log4j.RollingFileAppender">
   <param name="Threshold" value="ERROR"/> 
   ....
</appender>

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

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

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

至于你的两个例子:

priority value =“DEBUG”和param name =“Threshold”value =“ERROR”

priority value =“ERROR”和param name =“Threshold”value =“DEBUG”

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

2。 记录器优先级设置为ERROR,appender阈值设置为DEBUG意味着记录器仅传递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

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


44
2018-01-24 21:26