1. ホーム
  2. c#

log4netでTraceメッセージを記録するには?

2023-09-23 21:02:14

質問

log4netを使用して、ログメッセージをローリングログファイルに書き込んでいます。

今、私はまた、すべてのトレースメッセージを System.Diagnostics.Trace からのすべてのトレースメッセージをそのログファイルにリダイレクトします。どのように設定すればいいのでしょうか?log4netのドキュメントでそれについて何かを見つけようとしましたが、成功しませんでした。それは全く可能ですか?

私がそれをしたい理由は、私がサードパーティライブラリのトレースメッセージに興味があるからです。

<log4net>
    <appender name="R1" type="log4net.Appender.RollingFileAppender">
      <file value="C:\Logs\MyService.log" />
      <appendToFile value="true" />
      <rollingStyle value="Date" />
      <maxSizeRollBackups value="10" />
      <datePattern value="yyyyMMdd" />
      <layout type="log4net.Layout.PatternLayout">
        <conversionPattern value="%date [%thread] %-5level %logger [%property{NDC}] - %message%newline" />
      </layout>
    </appender>
</log4net>

どのように解決するのですか?

Runeさんの提案により、log4netに出力する基本的なTraceListenerを実装してみました。

public class Log4netTraceListener : System.Diagnostics.TraceListener
{
    private readonly log4net.ILog _log;

    public Log4netTraceListener()
    {
        _log = log4net.LogManager.GetLogger("System.Diagnostics.Redirection");
    }

    public Log4netTraceListener(log4net.ILog log)
    {
        _log = log;
    }

    public override void Write(string message)
    {
        if (_log != null)
        {
            _log.Debug(message);
        }
    }

    public override void WriteLine(string message)
    {
        if (_log != null)
        {
            _log.Debug(message);
        }
    }
}