.NET常用日志记录中记录器名称的含义是什么?

时间:2011-01-12 08:38:31

标签: .net logging

我正在使用.NET common logging infrastructure V2.0。我得到了一个ILog对象:

ILog log = LogManager.GetLogger("myLogName");

我不明白日志名称的含义和效果。 如果我在整个过程中使用相同的名称是否重要,或者我可以只为每个类使用LogManager.GetCurrentClassLogger()(是的,我知道会带来性能损失)。

P.S: 我可能会使用log4net& ConsoleOutLogger。

2 个答案:

答案 0 :(得分:0)

我相信名字意味着你想要的意思。在不同的地方使用不同的名称有两个主要原因:

  • 您可以仅为该记录器配置日志记录(例如,如果您正在调查其中的问题,请调高特定代码区域的日志级别)。
  • 您可以从名称中轻松查看代码区域,因此您的消息实际上已经确定范围。

答案 1 :(得分:0)

请参阅下面的GetLogger实现。名称特定于具体记录器。

public sealed class LogManager
{
    ...
    public static ILoggerFactoryAdapter Adapter { get; set; }

    public static ILog GetLogger(string name)
    {
        return Adapter.GetLogger(name); // Adapter is  ILoggerFactoryAdapter
    }
}

public interface ILoggerFactoryAdapter
{
    // Methods
    ILog GetLogger(string name);
    ILog GetLogger(Type type);
}

对于log4net适配器实现看起来像这样

public class Log4NetLoggerFactoryAdapter : ILoggerFactoryAdapter
{
  ...
  public ILog GetLogger(string name)
  {
    return new Log4NetLogger(LogManager.GetLogger(name)); // LogManager - is log4net.Logmanager
  }
}