之后是否记录或添加日志记录的设计?

Rod*_*odi 2 .net logging

在编写新的应用程序或基础结构时,您是否考虑从一开始就进行日志记录?因此,有很多类导入/使用ILogger接口(内部构造函数用于注入)?

如果您已经(大部分)已经安装了应用程序,但没有考虑登录大多数或所有类,那该怎么办?您最终会如何向他们添加日志记录?

我之后添加的问题是,如果需要深入到依赖关系链中,最终可能需要在许多类中添加ILogger接口.

Rob*_*ine 6

我总是考虑从一开始就记录.

首先是决定使用哪种日志框架,但这通常是一个快速的选择.我个人经常使用log4net,这意味着每个类使用静态LogManager.GetLogger来获取记录器的实例.然后在config中定义每个日志调用的实际行为(我应该在哪里记录,我应该在哪个级别登录等).

但是,更重要的是,您应该考虑在实际开发应用程序时需要记录内容.没有必要比你编写代码更多地调整你的代码了,而且你可能比其他任何时候都更了解需要记录的内容.回溯性地删除那些不需要添加应该存在的日志记录的过度冗长的日志记录要容易得多.

所以是的 - 在您启动应用程序时始终考虑记录日志,如果您可以提供帮助,请不要尝试改编它.

[编辑:回答你关于如何注射的问题]

可能最简单的方法(假设您没有使用IoC容器)是沿着属性路径或构造函数注入.就个人而言,我更喜欢后者这种东西,所以我最终会得到类似log4net的东西:

public class MyClass
{
    private readonly ILog _logger;

    // usually I don't supply a logger directly, 
    // hence I let this ctor get a logger from the log manager.
    public MyClass() : this (LogManager.GetLogger(typeof(MyClass)))
    {

    }

    // this ctor only gets called directly if I want to mock out logging
    public MyClass(ILog logger)
    {
        _logger = logger;
    }
}
Run Code Online (Sandbox Code Playgroud)