我正在使用anotar catel fody登录我的应用程序。
在NLog.config中,我想为某些类使用不同的级别。配置示例
<logger name="SpaceA.*"
minlevel="Info"
writeTo="file"
final="true" />
<logger name="*"
minlevel="Debug"
writeTo="file" />
我创建了一个NLogListener类,它派生自catel的LogListenerBase。
public class NLogListener : LogListenerBase
{
private static readonly NLog.Logger Log = NLog.LogManager.GetCurrentClassLogger();
protected override void Debug(ILog log, string message, object extraData)
{
Log.Debug(message);
}
protected override void Info(ILog log, string message, object extraData)
{
Log.Info(message);
}
protected override void Warning(ILog log, string message, object extraData)
{
Log.Warn(message);
}
protected override void Error(ILog log, string message, object extraData)
{
Log.Error(message);
}
#endregion Methods
}
在我的代码中,我使用了Catel Anotar Fody:
LogTo.Debug("Starting something...");
现在无论我在哪里使用日志记录,它都显示为来自我定义LogListerer的命名空间。
我做错了什么,我必须改变才能像通常那样过滤类别名称上的NLog?
答案 0 :(得分:3)
问题是你在LogListener中获得了当前的类记录器:
private static readonly NLog.Logger Log = NLog.LogManager.GetCurrentClassLogger();
这样,您始终可以登录NLogListener类型。你应该做的是为每个条目获得正确的记录器类型:
protected override void Debug(ILog log, string message, object extraData)
{
var nlog = NLog.LogManager.GetClassLogger(log.TargetType);
nlog.Debug(message);
}