我正在使用使用 log4net 的第三方程序集。有问题的程序集过于频繁地记录到“信息”日志级别。这会给我的应用程序带来很多我不想要的噪音。
有没有办法可以为特定程序集配置不同的日志级别?
我正在使用使用 log4net 的第三方程序集。有问题的程序集过于频繁地记录到“信息”日志级别。这会给我的应用程序带来很多我不想要的噪音。
有没有办法可以为特定程序集配置不同的日志级别?
是的,有点。有一种方法可以根据配置文件中的记录器名称设置值。为方便起见,我省略了文件的其余部分,但在您的文件中,您应该有一个如下所示的根部分。
现在我只为另一个记录器添加额外的部分。
例如:
<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));
希望这对你有用。
从手册:
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”。