1

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

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

4

2 回答 2

6

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

现在我只为另一个记录器添加额外的部分。

例如:

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

希望这对你有用。

于 2013-03-28T22:31:31.483 回答
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”。

于 2013-03-28T22:34:18.043 回答