4
我想知道是否有任何方法可以在运行时更改记录器实例的类名称?我不想在每个类中创建记录器,而是通过构造函数注入它。但之后我这样做,我得到文件错误的类名称,调用该事件。项目结构是这样的NLog。更改班级名称
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 |信息| C1 | C1测试
2011-09 -07 09:33:59.7611 | INFO | c1 | c2 test
是否有一个特定的原因,你不想为每个类创建记录器? – MichaelMocko
这是正常的行为。您的记录器仅在'c1'类中初始化,所以记录器名称将始终为'c1'。如果你想让记录器名称成为你当前的类名,最好的方法是用'private Logger _logger = LogManager.GetCurrentClassLogger();'在每个类中创建一个记录器。我不明白你为什么不想这样做。你能解释一下为什么这是你的问题吗? – Otiel
记录器实例可以是静态的。这样可以节省CPU时间和资源。私人静态记录器_logger = LogManager.GetCurrentClassLogger(); – LostInComputer