1

我正在使用 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 吗?

4

1 回答 1

3

问题是您在 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);
}
于 2014-01-26T10:26:22.203 回答