本文介绍了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>

我想了解 priority value ="DEBUG" param name ="Threshold" value ="DEBUG" 的行为.

在我的记录器(com.sas)中,我设置了优先级值"DEBUG",并且该记录器的追加器为"B2BAPP",在"B2BAPP"中,我将阈值"定义为错误".

因此,"com.sas"的日志级别将设置为"DEBUG"还是"ERROR"?

情况:

上述情况的结果是什么?如何运作?

解决方案

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

您可以在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>

告诉附加器仅接受ERROR重要度或更高级别的语句(即ERROR和FATAL).

在您的示例中,日志级别设置为DEBUG.订阅者编写的内容与该问题正交.

关于您的两个示例:

1..记录程序优先级设置为DEBUG,附加程序阈值设置为ERROR,表示记录程序通过了DEBUG,INFO,WARN,ERROR和FATAL,但是附加程序仅接受ERROR和FATAL,因此您只会得到ERROR和致命的记录到您的日志中.

2..记录器优先级设置为ERROR且附加器阈值设置为DEBUG意味着记录器仅传递ERROR和FATAL,而附加器接受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

希望这种解释可以更好地描述概念.

My 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>

I would like to understand the behaviour of priority value="DEBUG" and param name="Threshold" value="DEBUG".

In my logger (com.sas) I have set the priority value "DEBUG" and appender of this logger is "B2BAPP" and in "B2BAPP" I have defined "Threshold" as "ERROR".

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

Cases :

What would be the output of the above cases? How does it work?

解决方案

The Logger component accepts logging instructions (logger.debug(), logger.error() etc calls) and sends them to appropriate destinations to the Appenders.

You can set a "priority" on the Logger and instruct it to accept only logging instructions of a certain level. The levels are (in ascending importance order): TRACE, DEBUG, INFO, WARN, ERROR and FATAL.

A configuration like this:

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

instructs the com.sas logger to only accept levels with a level of importance of WARN or higher (i.e. WARN, ERROR and FATAL).

The logging statements are then sent to Appenders. The appenders can also be configured to accept only statements of a certain importance level, one above a certain "threshold".

A configuration like:

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

tells the appender to only accept statements of ERROR importance or above (i.e. ERROR and FATAL).

In your example the log level is set to DEBUG. What gets written by the appenders is orthogonal to the issue.

As for your two examples:

1. Logger priority set to DEBUG and appender threshold set to ERROR means that the logger passes along DEBUG, INFO, WARN, ERROR and FATAL but appender only accepts ERROR and FATAL so you get only ERROR and FATAL into your log.

2. Logger priority set to ERROR and appender threshold set to DEBUG means that the logger passes along only ERROR and FATAL while the appender accepts DEBUG, INFO, WARN, ERROR and FATAL. You again get only ERROR and FATAL into your log.

But that's just an unfortunate case. Mixing the priority and the threshold can get you some nice functionality. For example...

... assume you just placed an application in staging and you need to monitor it for a bit until you move it to production. You have a developer and a system administrator doing the monitoring. While the developer want all the logs, the system administrator is busy and only wants to see the errors.

How do you configure that? How about something like this:

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

If you run code like:

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");

you get this in sysAdminLogs.log:

some error statement
some fatal statement

and this in developerLogs.log:

some debug statement
some info statement
some warn statement
some error statement
some fatal statement

Hope this explanation better describes the concepts.

这篇关于Log4j-优先级值和参数名称概念说明的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!

10-21 12:44