使用 anotar catel nlog 日志记录时无法过滤类名(在 NLog.config 中)
Posted
技术标签:
【中文标题】使用 anotar catel nlog 日志记录时无法过滤类名(在 NLog.config 中)【英文标题】:Unable to filter on class name (in NLog.config) when using anotar catel nlog logging 【发布时间】:2014-01-25 13:53:12 【问题描述】:我正在使用 anotar catel fody 登录我的应用程序。
在 NLog.config 中,我想为某些类使用不同的级别。示例配置
<logger name="SpaceA.*"
minlevel="Info"
writeTo="file"
final="true" />
<logger name="*"
minlevel="Debug"
writeTo="file" />
我创建了一个派生自 catel 的 LogListenerBase 的 NLogListener 类。
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?
【问题讨论】:
【参考方案1】:问题是你在 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);
【讨论】:
感谢 Geert,这是有道理的 :) 但是当我这样做时,我在调用 NLog.LogManager.GetCurrentClassLogger(log.TargetType) 时遇到以下错误:“无法访问类型的构造函数:VES。 Framework.AppDomainExtensions。是否授予了所需的权限?如果我在静态类中有日志消息调用,这似乎会发生。有什么想法吗? 好的,改变对 GetLogger(log.TargetType.ToString()) 的调用就成功了:)以上是关于使用 anotar catel nlog 日志记录时无法过滤类名(在 NLog.config 中)的主要内容,如果未能解决你的问题,请参考以下文章