我正在使用Log4Net处理我的WPF应用程序中的日志记录。
目前,记录器配置了其余的前端代码。如果我希望能够在这些层中使用记录器,我必须传递对Service层和Repository层的引用(我实际上将使用StructureMap)。这意味着后端依赖于前端,我不喜欢这样。
我想知道如何最好地处理这个问题?我应该在存储库层配置记录器吗?
答案 0 :(得分:4)
log4net LogManager.GetLogger(string name)将返回现有的记录器实例(如果已经创建了它)(例如,在另一层中),因此不需要传递记录器对象。
您需要了解多个线程/进程同时尝试写入同一个日志文件。您可以使用log4net MinimalLock,或尝试this第三方解决方案。两者都不理想(代码项目效率低,仍然遇到并发问题)。我最终写了自己的(不幸的是,它不公开)。
答案 1 :(得分:1)
记录是一个常见的跨领域问题,我看到过以几种不同的方式处理。最简单的方法是创建一个静态类,该类存在于由所有层共享的公共程序集中。
但是,由于您正在为IoC使用StructureMap,因此更好的解决方案是配置StructureMap以将您的记录器类(可能根据您的需要配置为单例)注入到创建的每个实例中。我个人更喜欢对这种交叉关注类进行属性注入,因此构造函数不会混乱,但这是一个偏好问题。