以下是我的情况:我有一个库项目,目的是覆盖log4net并使用自定义appender集中日志。我有这些课程:
myCustomLogManager
CustomLog
ICustomLog
在myCustomLogManager中,我得到了这个:
public class myCustomLogManager
{
public static ICustomLog GetLogger(System.Type t)
{
return new CustomLog(t);
}
// Other stuff
}
我的自定义日志:
class CustomLog : ICustomLog
{
private static ILog log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType);
public CustomLog(System.Type t)
{
log = LogManager.GetLogger(t);
}
public void Debug( string message, Exception e)
{
log.Debug(message, e);
}
}
在我的控制台应用程序项目中,在每个类中,我声明:
private static readonly ICustomLog logger = myCustomLogManager.GetLogger(typeof(myClass));
当我登录myClass时,没问题。但是如果我使用另一个我也记录的类(比如说myOtherClass),myClass中未来日志的记录器名称将具有值“myOtherClass”。为了说明问题,这里有一个输出的例子:
这很难解释,我希望我足够清楚,但事实是默认的记录器,在myOtherClass类中执行的操作之后是myProject.myOtherClass,当我登录myClass类时不会返回myProject.myClass
我该如何解决这个问题?
感谢您的阅读和帮助: - )
答案 0 :(得分:0)
log
CustomLog
非静态:
private ILog log;
(也不需要将其初始化为任何东西)
通过使用静态字段,您基本上只有一个记录器,因此当您使用日志管理器为第二个类获取“新”记录器时,它会被更改。