Common.Logging for .NETを使用するプロジェクトを調べていると、いくつかのクラスがロガー インスタンスをクラスの静的メンバーとして宣言していることに気付きました。例えば:
public class HelloJob : IJob
{
private static ILog _log = LogManager.GetLogger(typeof(HelloJob));
public HelloJob()
{
}
public virtual void Execute(IJobExecutionContext context)
{
_log.Info(string.Format("Hello World! - {0}", System.DateTime.Now.ToString("r")));
}
}
他のクラスでは、ロガーはインスタンス メンバーとして宣言されます。
public class SimpleExample : IExample
{
public virtual void Run()
{
ILog log = LogManager.GetLogger(typeof (SimpleExample));
log.Info("------- Initializing ----------------------");
// etc
}
}
いずれかのアプローチを好む理由はありますか?
どのような場合にそれぞれのアプローチが推奨されますか? スレッドセーフに関連していますか?
静的な「ロガー」メンバーを持つ「ロガー」クラスを宣言し、プロジェクト全体でそれを使用した場合、問題になるでしょうか (実際にはグローバル変数を持つという問題は別として)。