当设置语义日志应用程序块 (SLAB) 以使用多个接收器(例如平面文件和滚动文件)时,它不会根据我的逻辑级别写入每个接收器;我试图理解为什么。我可以让它基于关键字而不是基于 EventLevel 写入不同的接收器。
我希望一个接收器获取所有日志,另一个接收器仅获取警告级别(或最差)的日志。当我定义 2 个侦听器时,一个接收器的级别为“EventLevel.LogAlways”,另一个接收器的级别为“EventLevel.Warning”,我没有收到任何日志记录条目。(我定义了一个 EventSource 方法,其 EventLevel 为 Verbose,并期望从使用 EventLevel.LogAlways 定义的侦听器中查看日志记录)
贝娄是我试图实现的逻辑(如果这还不够逻辑,请告诉我,我会相应地更新):
1) 下面以aExpense为例,这就是在我的 Application_Start 中定义监听器的方式:
//Log to file with EventLevel of at least Warning
this.fileListener = FlatFileLog.CreateListener("aExpense.DataAccess.log", formatter: new XmlEventTextFormatter(EventTextFormatting.Indented), isAsync: true);
fileListener.EnableEvents(AExpenseEvents.Log, EventLevel.Warning, Keywords.All);
//Log to Rolling file with any EventLevel
this.rollingfileListener = RollingFlatFileLog.CreateListener("aExpense.UserInterface.log", rollSizeKB: 10, timestampPattern: "yyyy", rollFileExistsBehavior: RollFileExistsBehavior.Increment, rollInterval: RollInterval.Day, formatter: new JsonEventTextFormatter(EventTextFormatting.Indented), isAsync: true);
rollingfileListener.EnableEvents(AExpenseEvents.Log, EventLevel.LogAlways, Keywords.All);
2)写日志是这样完成的:
//Log the event for application starting using Symmantic Logging (in-process)
AExpenseEvents.Log.ApplicationStarting();
3) ApplicationStarting() 的 AExpenseEvents (EventSource) 方法是:
[Event(100, Level = EventLevel.Verbose, Keywords = Keywords.Application, Task = Tasks.Initialize, Opcode = Opcodes.Starting, Version = 1)]
public void ApplicationStarting()
{
if (this.IsEnabled(EventLevel.Verbose, Keywords.Application))
{
this.WriteEvent(100);
}
}