Trace
大規模なアプリケーションをクラスの使用から を介して通知を出力するように移行しようとしていlog4net
ます。TraceListener
そのため、出力を log4net のメッセージングにリダイレクトするカスタムを作成しました (この投稿に触発されました)。
public class Log4netTraceListener : TraceListener
{
private static readonly ILog logger = LogManager.GetLogger("Log4netTraceListener"); // Line 19
public Log4netTraceListener() { /* nothing special */ }
public override void TraceEvent(TraceEventCache eventCache, string source, TraceEventType eventType, int id, string message)
{
// some switching based on the TraceLevel, but eventually something like:
logger.Error(message);
}
}
コンソール アプリケーション ソリューションは、次の 3 つのプロジェクトでした。
- RunShipOrder - アプリケーションのエントリ ポイントであるコンソール プロジェクト
- ShipOrderAPI - このプロセスに関連するすべてのコードを含むクラス ライブラリ プロジェクト
- CodeLibrary - 多くのプロジェクトに共通するコードを含むクラス ライブラリ プロジェクト。
- Log4netTraceListener はこのプロジェクトにあります
RunShipOrder
プロジェクト内でを呼び出すことができLogManager.GetLogger("Log4netTraceListener")
、期待どおりに動作します。ただし、メソッドを呼び出そうとするとTrace
、例外がスローされます。クラスLogManager.GetLogger("Log4netTraceListener")
内への最初の呼び出しまでさかのぼります。Log4netTraceListener
スローされるConfigurationErrorsException
例外はTypeInitializationException
で、内部例外はです。内部例外はNullReferenceException
です。最も内側の例外のスタック トレースは次のとおりです。
at log4net.Core.LoggerManager.GetLogger(Assembly repositoryAssembly, String name)
at log4net.LogManager.GetLogger(Assembly repositoryAssembly, String name)
at log4net.LogManager.GetLogger(String name)
at CodeLibrary.Diagnostics.Log4netTraceListener..cctor() in Log4netTraceListener.cs:line 19
log4net コードベース内からこの例外をスローしている可能性のあるアイデアはありますか?