Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/logging/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Logging 如何为除“我的包”之外的所有内容设置错误阈值_Logging_Log4j_Apache Commons Logging - Fatal编程技术网

Logging 如何为除“我的包”之外的所有内容设置错误阈值

Logging 如何为除“我的包”之外的所有内容设置错误阈值,logging,log4j,apache-commons-logging,Logging,Log4j,Apache Commons Logging,我已经通过org.apache.log4j.PropertyConfigurator配置了日志记录 log4j.rootLogger=ERROR, console log4j.logger.com.mypackage=INFO log4j.appender.console=org.apache.log4j.ConsoleAppender // pattern, layout log4j.appender.console.Threshold=INFO 我使用一些第三方代码,通过直接调用来使用日志

我已经通过org.apache.log4j.PropertyConfigurator配置了日志记录

log4j.rootLogger=ERROR, console
log4j.logger.com.mypackage=INFO
log4j.appender.console=org.apache.log4j.ConsoleAppender
// pattern, layout
log4j.appender.console.Threshold=INFO
我使用一些第三方代码,通过直接调用来使用日志记录

org.apache.log4j.Logger.getLogger(name).callAppenders(...)
此调用跳过任何级别检查,并且仅依赖于appender阈值。 我无法提高appender阈值,因为我包中的日志也无法通过它。
我需要第三方代码和错误的信息日志级别。

您必须定义两个附件,一个用于您的资料,另一个用于第三方资料。然后配置2个记录器,该记录器将引用具有正确阈值的适当追加器

诸如此类:

<appender name="mystuff" class="org.apache.log4j.DailyRollingFileAppender">
    <param name="File" value="../logs/mystuff.log" />
    <param name="datePattern" value="yyyy-MM-dd" />
    <layout class="org.apache.log4j.PatternLayout">
        <param name="ConversionPattern" value="%d{dd-MM-yyyy kk:mm:ss.SSS} %-5p %c %x - %m%n" />

    </layout>
</appender>

<appender name="thridPartystuff" class="org.apache.log4j.DailyRollingFileAppender">
    <param name="File" value="../logs/thirdParty.log" />
    <param name="datePattern" value="yyyy-MM-dd" />
    <layout class="org.apache.log4j.PatternLayout">
        <param name="ConversionPattern" value="%d{dd-MM-yyyy kk:mm:ss.SSS} %-5p %c %x - %m%n" />

    </layout>
</appender>

<logger name="com.mystuf" additivity="true">
    <level value="info" />
    <appender-ref ref="mystuff" />
</logger>

<logger name="com.third.party.package">
    <level value="error" />
    <appender-ref ref="thridPartystuff" />
</logger>

有效的解决方案(尽管我觉得不是很好)与Cygnusx1提出的类似:定义两个具有不同阈值的控制台附加器,并相应地分配它们:

log4j.rootLogger=ERROR, console // receive error message on console from all packages
log4j.logger.com.problematic= , console2  // define another appender for the problematic package
log4j.additivity.com.problematic = false // don't propagate messages to root to avoid duplicates

log4j.appender.console2 = org.apache.log4j.ConsoleAppender
log4j.appender.console2.Threshold = ERROR

实际上,问题在于控制台(你不能有两个),我从来没有看到过一个限制不允许你用org.apache.log4j.ConsoleAppender类定义2 appender。。。!但我不明白为什么要定义两个登录到同一个源的appender!在我看来,Appender可以将不同的内容记录在不同的文件中,以保持日志的整洁和有序。只是我的2c;-)sry,但您只是不理解问题:您必须从第三方库中删除调试消息,并保留您的消息。