我现在不在电脑旁,无法尝试您的情况,但我有几个问题。
您能否尝试使用“常规”日志记录功能(信息、调试),看看是否按预期工作?
您是如何解决您的记录器的?也就是说,“记录器”的名称是什么?
如果实际记录器的名称不是“Model”,那么我猜它将不符合“Model”条件,即使您在LogEventInfo的Name字段中传递了“Model”。
[编辑]
这是一个更好的NLog记录器包装器的简化示例,可以在Ninject Logging扩展中使用。该包装器以保留调用站点信息的方式委托日志记录调用到底层NLog记录器。
class NLogLogger : ILogger
{
private NLog.Logger logger;
public NLogLogger(Type t)
{
logger = NLog.LogManager.GetLogger(t.FullName);
}
public bool IsInfoEnabled
{
get { return logger.IsInfoEnabled; }
}
public bool IsDebugEnabled
{
get { return logger.IsDebugEnabled; }
}
public void Info(string format, params object [] args)
{
if (logger.IsInfoEnabled)
{
Write(LogLevel.Info, format, args);
}
}
public void Debug(string format, params object [] args)
{
if (logger.IsDebugEnabled)
{
Write(LogLevel.Debug, format, args);
}
}
private void Write(LogLevel level, string format, params object [] args)
{
LogEventInfo le = new LogEventInfo(level, logger.Name, null, format, args);
logger.Log(typeof(NLogLogger), le);
}
}
显然,这个例子没有涉及到异常处理。但是,我认为它展示了正确的封装NLog的方式。很容易实现完整的Ninject Logging Extension ILogger接口,将每个Info、Debug、Warn等调用委托给一个中心Write方法,该方法将创建LogEventInfo类,然后使用底层的NLog logger实例记录它,传递包装日志记录器的类型(在我的示例中为
typeof(NLogLogger)
)。传递包装日志记录器的类型对于维护应用程序代码中的日志记录调用的调用站点信息至关重要。
基于在
Ninject Logging Extensions git repository中找到的NLog包装器。
更多关于依赖注入和命名日志记录器(如NLog和log4net)的信息。
有关天真的日志记录器包装器问题的更多信息,请参见
此处的答案。
var logger = LogManager.GetCurrentClassLogger();
。 现在我在这个类中添加了第二个日志器var modelLogger = LogManager.GetLogger("Model");
并开始使用它。 我对“名称”匹配的理解有误。 这可能更像是一个变通方法而不是解决方案,但它可以工作。 - mattdwen