我想知道是否有任何方法可以在运行时更改记录器实例的类名?我不想在每个类中创建记录器,而是通过构造函数注入它.但是在我这样做之后,我得到了错误的类名,它调用了这个事件.项目结构是这样的
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 test
2011-09-07 09:33:59.7611|INFO|c1|c2 test
解决方法:
使用${callsite}
渲染器而不是${logger}布局渲染器.
<target xsi:type="Trace"
name="t"
layout="${callsite:className=true:includeSourcePath=false:methodName=false}
| ${message}" />
这应该产生您的预期结果.