查看一个使用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
}
}
有理由偏爱一种方法吗?
在哪些情况下推荐每种方法?它与线程安全有关吗?
如果我刚刚声明了一个带有静态“记录器”成员的“记录器”类并且整个项目都使用了它(除了我实际上有一个全局变量的问题),这会不会有问题?