呼び出しサイト情報が保持されるように NLog Logger をラップする正しい方法の簡単な例については、SO でこの回答を参照してください。
特定の NLog ロガー名の一致に関する問題
これは、NLog Logger のラッピングに関する別の質問です。実際、質問はNLog Loggerのラップに関するものではありませんが、私の回答は別の回答のNLog Loggerラッパーの実装の問題を指摘しています。
MEFでNLogを使用する最良の方法は何ですか?
重要なのは、NLog メソッドの観点からラッパーのロギング メソッドを実装し、ラッパーのを最初のパラメーターとしてLogger.Log
渡すことです。type
時間を節約するために、NLog Logger ラッパー コードのわずかに短縮されたバージョンをここに投稿しました。
class NLogLogger : ILogger
{
private NLog.Logger logger;
public NLogLogger(Type t)
{
logger = NLog.LogManager.GetLogger(t.FullName);
}
//Trace, Warn, Error, Fatal eliminated for brevity
public bool IsInfoEnabled
{
get { return logger.IsInfoEnabled; }
}
public bool IsDebugEnabled
{
get { return logger.IsDebugEnabled; }
}
public void Info(string format, params object [] args)
{
if (logger.IsInfoEnabled)
{
Write(LogLevel.Info, format, args);
}
}
public void Debug(string format, params object [] args)
{
if (logger.IsDebugEnabled)
{
Write(LogLevel.Debug, format, args);
}
}
private void Write(LogLevel level, string format, params object [] args)
{
LogEventInfo le = new LogEventInfo(level, logger.Name, null, format, args);
logger.Log(typeof(NLogLogger), le);
}
}
次のようにラッパーを使用します。
class MyClass
{
private static readonly logger = new NLogLogger(typeof(MyClass));
public void DoSomething()
{
logger.Info("Hello from DoSomething");
}
}
または、ロガーをクラスに挿入することもできます。