0

我有一个界面

public interface ILoggerService
{
    void Info(string message);
    void Warn(string message);
}

然后,我有一个使用 Log4Net 实现这个接口和日志的类

public class Log4NetLoggerService : ILoggerService
{
    private readonly ILog _logger;
    public Log4NetLoggerService()
    {
        // this always returns Log4NetLoggerService class type
        _logger = LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType);
    }

    public void Info(string message)
    {
        _logger.Info(message);
    }
}

这很好用,但问题是如果我想记录当前的类和方法名(使用 %class - %M),它总是Log4NetLoggerService作为类返回,作为方法返回Info作为方法。

我需要获取称为日志记录方法的“父”类类型。

我可以在创建ILoggerService实例时以某种方式注入调用日志方法的类的类型吗?

4

2 回答 2

1

查看 log4net 源代码;特别是他们如何实现 ILog 接口。您基本上不能在包装器中使用 ILog 接口,而是使用内部记录器,该记录器接受一个参数,该参数指示 log4net 在调用堆栈中查找正确的类/方法的位置。另请参阅此答案

于 2013-03-12T11:01:04.117 回答
1

以我的经验,如果您需要您登录的类的名称,那么您可能在应用程序的太多地方登录了太多内容。这可能会导致维护问题。看看这个 Stackoverflow 答案,以验证您是否没有记录太多以及是否违反了 SOLID 原则。

于 2013-03-12T19:17:19.633 回答