如果您希望能够轻松区分日志级别并为每个类使用不同的日志目标(“appender”),那么您是对的,即不是最佳方法。
它通常建议每个类都有一个静态ILog
情况下,后命名的完全合格的类型:
namespace Animals
{
public class Dog
{
private static readonly ILog Log = LogManager.GetLogger(typeof(Dog));
}
public class Cat
{
private static readonly ILog Log = LogManager.GetLogger(typeof(Cat));
}
}
虽然这看起来像是与具有单更多的工作,它证明了在长期非常方便。一旦你做到了这一点,很容易区分通过配置文件Dog
和Cat
日志级别(例如与log4net语法所示):
<log4net>
<!-- appender definitions ommited -->
<!-- default for all loggers in Animals namespace -->
<logger name="Animals">
<level value="WARN"/>
</logger>
<!-- ...but we need full debug for Dogs -->
<logger name="Animals.Dog">
<level value="DEBUG"/>
</logger>
<!-- ...and we want to send Cat messages over e-mail -->
<logger name="Animals.Cat">
<level value="INFO"/>
<appender-ref ref="SmtpAppender"/>
</logger>
</log4net>
日志框架log4net的一样也使用的hierarchical logging的概念:一个记录器被称为另一个记录器的祖先,如果它的名字后跟一个点是后代记录器名称的前缀。要使用此功能,最好避免手动命名记录器(使用硬编码string
),而是使用类型信息来包含整个名称空间。
如何依赖日志解决方案干扰有效的单元测试?我很想看到一个例子。 – tsells
我同意@tsells:记录可能是规避单身人士的最佳例外(尽管拥有* single * logger是我不主张的)。如果您使用的是日志记录框架,我非常怀疑您是否需要自己测试记录器,或者注入记录器模拟器?我认为在为单元测试启用日志记录功能时没有太大的伤害,日志级别可以根据需要进行不同的配置,而且只能帮助解决问题。 – Groo