log4net如何设置特定程序集的日志级别?

时间:2013-03-28 22:11:40

标签: .net log4net log4net-configuration

我正在使用利用log4net的第三方程序集。有问题的程序集经常记录到“信息”日志级别。这会给我的应用程序带来很多我不想要的噪音。

有没有办法可以为特定程序集配置不同的日志级别?

2 个答案:

答案 0 :(得分:5)

是的,有点儿。 有一种方法可以根据配置文件中的记录器名称设置值。为了方便起见,我将文件的其余部分省略,但在你的文件中你应该有一个如下所示的根部分。

现在我只为其他记录器添加额外的部分。

例如:

<root>        
    <level value="ERROR" />    
    <appender-ref ref="RollingFile" />
</root>    
<logger name="ServiceLib">
    <level value="DEBUG"/>  
</logger>

如果您通过传递类型创建记录器,则此方法有效。然后,该名称基于类的名称空间。 像这样:

private static readonly ILog log = LogManager.GetLogger(typeof(ServiceLib.MyWebService));

希望这适合你。

答案 1 :(得分:2)

从手册:

http://logging.apache.org/log4net/release/manual/configuration.html

您不能为程序集执行此操作,但可以对该程序集中的程序包执行此操作。因此,如果该程序集打包所有内容都以Com.Foo开头,则后面的配置将执行您想要的操作并将日志记录限制为WARN级别以上,因此不会显示INFO日志记录。

<log4net>
    <!-- A1 is set to be a ConsoleAppender -->
    <appender name="A1" type="log4net.Appender.ConsoleAppender">

        <!-- A1 uses PatternLayout -->
        <layout type="log4net.Layout.PatternLayout">
            <!-- Print the date in ISO 8601 format -->
            <conversionPattern value="%date [%thread] %-5level %logger %ndc - %message%newline" />
        </layout>
    </appender>

    <!-- Set root logger level to DEBUG and its only appender to A1 -->
    <root>
        <level value="DEBUG" />
        <appender-ref ref="A1" />
    </root>

    <!-- Print only messages of level WARN or above in the package Com.Foo -->
    <logger name="Com.Foo">
        <level value="WARN" />
    </logger>
</log4net>

如果您使用的Lib不遵循此约定(基于类型名称进行日志记录),则必须签入日志记录文件,Lib用于记录的字符串是什么,并更改该字符串的“Com.Foo”。 / p>