在基类中声明一个记录器并调用LogManager.GetLogger
似乎更清晰,这样每个正在继承的人都可以使用它。然而,在log4net的网站和其他博客就像this blog post它指出,最好是每类中声明一个记录器,因为:我应该为每个类或基类声明log4net记录器吗?
您可以使用记录器这种方式在你的对象隔离日志关切,我完全推荐你这样做。这将使您能够使用log4net的分层配置机制来限制和指导单个记录器的日志输出。
这是否意味着如果我把它放在基类中,它会使记录器成为瓶颈?
如果是这样,还有其他解决方案,还是我只需要创建每个类的记录器?
OP正在使用log4net。虽然记录器类是单例模式很有用的罕见情况之一,但为每类使用不同的记录器可以极大地增强故障诊断能力:您可以非常详细地配置分别记录每个类的消息级别。您还可以将来自不同记录器的消息输出到不同的目标(文本文件,事件日志,电子邮件)。我强烈建议使用这样的库。如果记录器是静态实例化的(每种类型一次),性能差异可以忽略不计。 (不是我的downvote,但是) – Groo 2012-01-30 22:40:38
你的单例不是线程安全的,所以你最终可能会有不同的Logger实例(在记录器的情况下可能不是一个大问题,但值得注意)。另外,对于日志记录,你可能不希望这种模式的分数慢一些(因为它必须执行额外的空检查......可能不是什么大事,但值得注意)。 – 2012-01-30 22:41:30
不熟悉log4net? – 2012-01-30 22:42:14