我的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>
Run Code Online (Sandbox Code Playgroud)
我想了解priority value ="DEBUG"和param name ="Threshold"value ="DEBUG"的行为.
在我的logger(com.sas)中,我设置了优先级值"DEBUG",该记录器的appender为"B2BAPP",在"B2BAPP"中,我将"Threshold"定义为"ERROR".
那么"com.sas"的日志级别将设置为"DEBUG"或"ERROR"?
案例:
priority value ="DEBUG"和param name ="Threshold"value ="ERROR"
priority value ="ERROR"和param name ="Threshold"value ="DEBUG"
上述案件的结果会是什么?它是如何工作的?
Bog*_*dan 55
该Logger组件接受记录的指令(logger.debug(),logger.error()等的呼叫),并将它们发送到适当的目的地的Appender第
您可以在其上设置"优先级" Logger并指示它仅接受某个级别的日志记录指令.级别(按重要性递增顺序):TRACE,DEBUG,INFO,WARN,ERROR和FATAL.
像这样的配置:
<logger name="com.sas">
<priority value="WARN" />
....
</logger>
Run Code Online (Sandbox Code Playgroud)
指示com.sas记录器仅接受具有WARN或更高重要性级别(即WARN,ERROR和FATAL)的级别.
然后将日志记录语句发送给Appenders.附加程序还可以配置为仅接受某个重要性级别的语句,一个高于某个"阈值".
配置如下:
<appender name="B2BAPP" class="org.apache.log4j.RollingFileAppender">
<param name="Threshold" value="ERROR"/>
....
</appender>
Run Code Online (Sandbox Code Playgroud)
告诉appender只接受ERROR重要性或更高级别的陈述(即ERROR和FATAL).
那么"com.sas"的日志级别将设置为"DEBUG"或"ERROR"?
在您的示例中,日志级别设置为DEBUG.appenders写的内容与问题正交.
至于你的两个例子:
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>
Run Code Online (Sandbox Code Playgroud)
如果您运行如下代码:
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");
Run Code Online (Sandbox Code Playgroud)
你得到这个sysAdminLogs.log:
some error statement
some fatal statement
Run Code Online (Sandbox Code Playgroud)
这个在developerLogs.log:
some debug statement
some info statement
some warn statement
some error statement
some fatal statement
Run Code Online (Sandbox Code Playgroud)
希望这个解释更好地描述这些概念.