我应该在哪里存储Logger代码以减少依赖性?

时间:2012-04-10 15:39:55

标签: c# oop dependencies log4net

我正在使用Log4Net处理我的WPF应用程序中的日志记录。

目前,记录器配置了其余的前端代码。如果我希望能够在这些层中使用记录器,我必须传递对Service层和Repository层的引用(我实际上将使用StructureMap)。这意味着后端依赖于前端,我不喜欢这样。

我想知道如何最好地处理这个问题?我应该在存储库层配置记录器吗?

2 个答案:

答案 0 :(得分:4)

log4net LogManager.GetLogger(string name)将返回现有的记录器实例(如果已经创建了它)(例如,在另一层中),因此不需要传递记录器对象。

您需要了解多个线程/进程同时尝试写入同一个日志文件。您可以使用log4net MinimalLock,或尝试this第三方解决方案。两者都不理想(代码项目效率低,仍然遇到并发问题)。我最终写了自己的(不幸的是,它不公开)。

答案 1 :(得分:1)

记录是一个常见的跨领域问题,我看到过以几种不同的方式处理。最简单的方法是创建一个静态类,该类存在于由所有层共享的公共程序集中。

但是,由于您正在为IoC使用StructureMap,因此更好的解决方案是配置StructureMap以将您的记录器类(可能根据您的需要配置为单例)注入到创建的每个实例中。我个人更喜欢对这种交叉关注类进行属性注入,因此构造函数不会混乱,但这是一个偏好问题。