日志文件中缺少 NLog 记录器名称,您知道原因吗?

Posted

技术标签:

【中文标题】日志文件中缺少 NLog 记录器名称,您知道原因吗?【英文标题】:NLog logger name missing from the log file, do you see why? 【发布时间】:2013-10-06 01:05:21 【问题描述】:

我正在使用 NLog 从 ASP.NET 应用程序进行日志记录。除了 $logger 之外,一切都很好。我的日志文件缺少记录器名称。这是 NLog 配置文件中的目标行:

<target name="DebugToFile" xsi:type="File" fileName="$basedir/Debug.log" layout="$logger | $longdate | $message" />

这是我在日志文件中得到的:

| 2013-10-05 17:55:20.9852 | In Decrypt
| 2013-10-05 17:55:20.9852 | In Deserialize

下面是创建记录器实例的 C# 行:

new Log("Iamalogger").Debug("In Decrypt");

知道为什么 $logger 没有被接收吗?

编辑:2014 年 1 月 14 日 这是我正在使用的日志包装器:

public class Log 

    private Logger _log;

    public Log(string class)
    
        _log = LogManager.GetLogger(class);
    

    //methods for logging...

【问题讨论】:

你能告诉我们你的 Log 类的代码吗? 正如@wageoghe 所说,您似乎正在使用客户日志类,这是正确的吗?如果是,请提供该类的源代码 对不起,这被我的优先级降低了。刚刚使用我正在使用的日志包装器中的代码进行了更新。 【参考方案1】:

我知道这是一个老问题,但我最近偶然发现了这个问题,所以我想说明我的实现有什么问题,以防其他人发现自己处于这种情况。

由于问题中的日志包装器没有显示 Debug 方法的实现,我假设它类似于我在包装器中所做的实现:

public class Log

    private Logger _log;

    public Log (string className)
    
        _log = LogManager.GetLogger(className);
    

    public void Debug(string message)
    
        _log.Log(new LogEventInfo
        
            TimeStamp = DateTime.UtcNow,
            Level = LogLevel.Debug,
            Message = message,
        );
    

...当然,如果我们像这样使用这个类:

new Log("Iamalogger").Debug("In Decrypt");

日志缺少记录器名称:

 | 2018-05-13 15:58:06.1805 | In Decrypt

解决方案是将值设置为LogEventInfo 中的LoggerName 属性:

public void Debug(string message)

    _log.Log(new LogEventInfo
    
        TimeStamp = DateTime.UtcNow,
        Level = LogLevel.Debug,
        Message = message,
        LoggerName = _log.Name
    );

或使用接受记录器名称的构造函数:

public void Debug(string message)

    _log.Log(new LogEventInfo(LogLevel.Debug, _log.Name, message)
    
        TimeStamp = DateTime.UtcNow
    );

导致写入以下日志:

Iamalogger | 2018-05-13 16:18:16.1201 | In Decrypt

【讨论】:

以上是关于日志文件中缺少 NLog 记录器名称,您知道原因吗?的主要内容,如果未能解决你的问题,请参考以下文章

拥有不同配置的 NLog 记录器

Net Core 2.1 日志记录框架NLog+Mysql配置

“Async”关键字是使 NLog 日志记录异步的唯一要求吗?

NLog 基于静态变量创建日志文件

使用NLog记录文本日志

.net core 杂记:日记记录