我的自定义LogManager出现问题

时间:2011-05-26 09:32:40

标签: c# .net log4net

以下是我的情况:我有一个库项目,目的是覆盖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”。为了说明问题,这里有一个输出的例子:

  • [Info] myProject.myClass:“来自myClass的日志!”
  • [Info] myProject.myOtherClass:“来自myOtherClass的日志!”
  • [Info] myProject.myOtherClass:“来自myClass的第二个日志!!”

这很难解释,我希望我足够清楚,但事实是默认的记录器,在myOtherClass类中执行的操作之后是myProject.myOtherClass,当我登录myClass类时不会返回myProject.myClass

我该如何解决这个问题?

感谢您的阅读和帮助: - )

1 个答案:

答案 0 :(得分:0)

log CustomLog非静态:

private ILog log;

(也不需要将其初始化为任何东西)

通过使用静态字段,您基本上只有一个记录器,因此当您使用日志管理器为第二个类获取“新”记录器时,它会被更改。