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 に答える