【发布时间】:2011-09-07 06:56:34
【问题描述】:
我想知道是否有任何方法可以在运行时更改记录器实例的类名?我不想在每个类中创建记录器,而是通过构造函数注入它。但是在我这样做之后,我得到了调用事件的文件错误的类名。项目结构是这样的
public class c1
{
private Logger _logger = LogManager.GetCurrentClassLogger();
public void doSmth()
{
c2 myC2= new c2(_logger);
myC2.LogSomething();
}
public void LogSomething()
{
_logger.Info("c1 test");
}
}
public class c2
{
private Logger _logger;
public c2(Logger logger)
{
this._logger = logger;
}
public void LogSomething() {
_logger.Info("c2 test");
}
}
一切正常,但在日志文件中我们得到
2011-09-07 09:33:59.7521|INFO|c1|c1 测试
2011-09-07 09:33:59.7611|INFO|c1|c2 测试
【问题讨论】:
-
您是否有特定原因不想为每个类创建记录器?
-
这是正常行为。您的记录器仅在
c1类中初始化,因此记录器名称将始终为c1。如果您希望记录器名称成为您当前的类名,最好的方法仍然是使用private Logger _logger = LogManager.GetCurrentClassLogger();在每个类中创建一个记录器。我不明白你为什么不想这样做。你能解释一下为什么这对你来说是个问题吗? -
记录器实例可以是静态的。这样,您可以节省 CPU 时间和资源。私有静态 Logger _logger = LogManager.GetCurrentClassLogger();