我想知道是否有办法在运行时更改logger实例的类名?我不想在每个类中创建记录器,而是通过构造函数注入它。但是在我这样做之后,我得到了错误的类名,它调用了这个事件。项目结构就像这样
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 test
答案 0 :(得分:3)
使用${callsite}
渲染器,而不是${logger}
布局渲染器。
<target xsi:type="Trace"
name="t"
layout="${callsite:className=true:includeSourcePath=false:methodName=false}
| ${message}" />
这应该会产生您的预期结果。