我正在使用利用log4net的第三方程序集。有问题的程序集经常记录到“信息”日志级别。这会给我的应用程序带来很多我不想要的噪音。
有没有办法可以为特定程序集配置不同的日志级别?
答案 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>