使用 anotar catel nlog 日志记录时无法过滤类名(在 NLog.config 中)

Posted

技术标签:

【中文标题】使用 anotar catel nlog 日志记录时无法过滤类名(在 NLog.config 中)【英文标题】:Unable to filter on class name (in NLog.config) when using anotar catel nlog logging 【发布时间】:2014-01-25 13:53:12 【问题描述】:

我正在使用 anotar catel fody 登录我的应用程序。

在 NLog.config 中,我想为某些类使用不同的级别。示例配置

<logger name="SpaceA.*"
        minlevel="Info"
        writeTo="file"
        final="true" />
<logger name="*"
        minlevel="Debug"
        writeTo="file" />

我创建了一个派生自 catel 的 LogListenerBase 的 NLogListener 类。

public class NLogListener : LogListenerBase

    private static readonly NLog.Logger Log = NLog.LogManager.GetCurrentClassLogger();

    protected override void Debug(ILog log, string message, object extraData)
    
        Log.Debug(message);
    

    protected override void Info(ILog log, string message, object extraData)
    
        Log.Info(message);
    

    protected override void Warning(ILog log, string message, object extraData)
    
        Log.Warn(message);
    

    protected override void Error(ILog log, string message, object extraData)
    
        Log.Error(message);
    
    #endregion Methods

在我的代码中,我使用 Catel Anotar Fody:

LogTo.Debug("Starting something...");

现在无论我在哪里使用日志记录,它都显示为来自我定义 LogListerer 的命名空间。

我做错了什么,因此我是否必须进行更改才能像通常那样过滤类名上的 NLog?

【问题讨论】:

【参考方案1】:

问题是你在 LogListener 中获取了当前的类记录器:

private static readonly NLog.Logger Log = NLog.LogManager.GetCurrentClassLogger();

这样,您总是登录到 NLogListener 类型。您应该为每个条目获取正确的记录器类型:

protected override void Debug(ILog log, string message, object extraData)

    var nlog = NLog.LogManager.GetClassLogger(log.TargetType);
    nlog.Debug(message);

【讨论】:

感谢 Geert,这是有道理的 :) 但是当我这样做时,我在调用 NLog.LogManager.GetCurrentClassLogger(log.TargetType) 时遇到以下错误:“无法访问类型的构造函数:VES。 Framework.AppDomainExtensions。是否授予了所需的权限?如果我在静态类中有日志消息调用,这似乎会发生。有什么想法吗? 好的,改变对 GetLogger(log.TargetType.ToString()) 的调用就成功了:)

以上是关于使用 anotar catel nlog 日志记录时无法过滤类名(在 NLog.config 中)的主要内容,如果未能解决你的问题,请参考以下文章

C# 使用NLog记录日志

.NET Core使用Nlog记录日志

使用NLog记录文本日志

.net core使用NLog+Elasticsearch记录日志

NLog记录日志到Oracle数据库

ASP.NET Core使用NLog记录日志