我正在使用 Prism 4,并希望允许我的各种模块使用 log4net 进行日志记录。目前我有以下 ILoggerFacade 实现:
public class CustomLogger : ILoggerFacade
{
private readonly ILog _logger = LogManager.GetLogger(MethodBase.GetCurrentMethod().GetType());
static CustomLogger()
{
XmlConfigurator.Configure();
}
public void Log(string message, Category category, Priority priority)
{
switch (category)
{
case Category.Debug:
_logger.Debug(message);
break;
case Category.Info:
_logger.Info(message);
break;
case Category.Warn:
_logger.Warn(message);
break;
case Category.Exception:
_logger.Error(message);
break;
}
}
}
这很好用,我的模块注入了 ILoggerFacade 并可以通过它登录,最终在 log4net 中结束。我的问题是日志条目在使用 CustomLogger 的记录器实例时会丢失呼叫站点信息,因此最终看起来像这样:
System.Reflection.RuntimeConstructorInfo: 2012-10-11 15:41:07,486 [23] INFO - test log
有没有人设法解决这个问题?我曾考虑过传入调用者的类型,但对于我的模块中的每个日志调用都必须这样做似乎有点笨拙。
我无法使用 .Net 4.5,所以很遗憾无法使用CallerMemberNameAttribute。