.net - 设计日志记录还是之后添加日志记录?

标签 .net logging

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

如果您已经准备好(大部分)应用程序,但没有考虑登录大部分或所有类(class),该怎么办?您最终将如何向它们添加日志记录?

我对事后添加的担心是,如果您需要深入到依赖链中进行日志记录,您最终可能不得不向许多类添加一个 ILogger 接口(interface)。

最佳答案

我总是从一开始就考虑日志记录。

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

但是,更重要的是,您应该在实际开发应用程序时考虑什么需要记录。没有什么时候比编写代码时更关注代码了,而且此时您可能比其他任何时候都更了解需要记录的内容。追溯删除不需要的过于冗长的日志记录要容易得多,添加应该存在的日志记录。

所以是的 - 在启动应用程序时始终考虑日志记录,如果可以的话,不要尝试对其进行改造。

[编辑:回答您关于如何注入(inject)的问题]

可能最简单的方法(假设您没有使用 IoC 容器)是沿着属性或构造函数注入(inject)的路线前进。就个人而言,对于这种事情我更喜欢后者,所以我最终会为 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;
    }
}

关于.net - 设计日志记录还是之后添加日志记录?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5485117/

相关文章:

.net - Enterprise Library 5.0 日志记录 - rollInterval

c# - 如何在c#中写入日志文件?

.net - Windows 窗体和 ShowDialog 问题

.net - EF 4.1 Code First - OnModelCreating 调用时间

c# - 远程服务器返回错误 : (550) File unavailable(Error occured on making ftp directory)

Node.js 管道控制台错误到另一个程序(使其异步)

api - 如何像 Wine 在 Linux 中一样记录 Windows 中的所有 API 调用?

java - 使用带有单独线程的 java.util.logger 来写入文件?

.net - 使用字典是处理错误的有效方法吗?

c# - 使用 LINQ 从 xml 创建实体对象的最佳方法