我不知道这是否有资格作为答案,但是您是否考虑过一种方法,每个对象都记录一个唯一的 id?这样,您可以使用 NLog 的过滤功能来限制日志记录的数量。这里有一个老例子:http: //nlog-forum.1685105.n2.nabble.com/Config-examples-with-filters-td1685363.html
从 NLog 论坛开始复制:
为了完整起见(如果链接变坏),这里是内联示例:
<?xml version="1.0" ?>
<nlog>
<targets>
<target name="console" type="Console" layout="${logger} ${message}" />
</targets>
<rules>
<logger name="*" minlevel="Debug" writeTo="console">
<filters>
<whenContains layout="${message}" substring="zzz" action="Ignore" />
</filters>
</logger>
</rules>
</nlog>
此示例代码:
using NLog;
using NLog.Targets;
using NLog.Targets.Wrappers;
class Example
{
static void Main(string[] args)
{
Logger logger = LogManager.GetLogger("Example");
logger.Debug("log message");
logger.Debug("log zzz message");
}
}
仅生成“示例日志消息”(第二条日志消息被
或者,您可以使用称为条件的新功能(在最新快照中提供),它允许您使用简单的符号编写过滤器:
<filters>
<when condition="contains(message,'zzz')
or level >= LogLevel.Warn
or level == LogLevel.Trace" action="Ingore" />
</filters>
END 从 NLog 论坛复制
这并不能直接回答您的问题(我认为这是执行某些日志记录语句,而不管配置的日志级别和使用的日志记录方法(信息、调试等)如何)。我怀疑很难覆盖/解决 NLog 内置的日志级别启用。
如果 NLog 的过滤确实给了您想要的结果,那么记录到数据库怎么样?您可以记录所有内容,使用唯一 ID 标记某些对象的记录语句。然后,您可以使用数据库的过滤/分组/排序功能仅查看某些对象的日志记录语句。
祝你好运!