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