我有一个 Azure 云服务,它使用 Quartz.Net (2.3.2) 来运行计划任务。我的主要日志引擎是 Log4Net (2.0.3) ,我正在使用 Common.Logging.Log4Net1213 (3.0.0) 来连接 Common.Logging 和 Log4Net。我正在使用我自己的“NinjectJobFactory”来创建所有作业及其依赖项(它实现了 IJobFactory)。我的计划启动代码如下所示:
_scheduler = factory.GetScheduler();
_scheduler.JobFactory = new NinjectJobFactory(_kernel);
_scheduler.Start();
一切都非常适合正常的日常日志记录(Quartz 启动和关闭、NServiceBus 启动、任务启动、作业内的异常处理等)。我遇到的问题是,上面的任何行中都有一个致命的异常,它会阻止 Quartz 启动。(通常,这是因为我未能正确包含或配置其中一项工作所需的依赖项)。在这些情况下,我没有记录真正的问题,而是在 Log4NetLogger.cs 中得到一个异常,抱怨未知的日志记录级别,并且永远不会出现或记录底层异常。我必须中断捕获的异常才能看到底层异常。任何人都可以建议修复吗?提前致谢!
堆栈跟踪如下所示:
Microsoft.WindowsAzure.ServiceRuntime 严重:1:未处理的异常:System.ArgumentOutOfRangeException:未知的日志级别参数名称:logLevel 实际值为错误。在 Common.Logging.Log4Net.Log4NetLogger.GetLevel(LogLevel logLevel) 在 c:_oss\common-logging\src\Common.Logging.Log4Net129\Logging\Log4Net\Log4NetLogger.cs:Common.Logging.Log4Net.Log4NetLogger 的第 180 行。 WriteInternal(LogLevel logLevel, Object message, Exception exception) in c:_oss\common-logging\src\Common.Logging.Log4Net129\Logging\Log4Net\Log4NetLogger.cs:Common.Logging.Factory.AbstractLogger.Error(Object) 的第 140 行消息,异常异常)在 c:_oss\common-logging\src\Common.Logging.Portable\Logging\Factory\AbstractLogger.cs:c 中 Quartz.Simpl.SimpleThreadPool.WorkerThread.Run() 的第 806 行:
我在 app.config 中的 common.logging 配置是:
<common>
<logging>
<factoryAdapter type="Common.Logging.Log4Net.Log4NetLoggerFactoryAdapter, Common.Logging.Log4Net1213">
<arg key="configType" value="FILE" />
<arg key="configFile" value="log4net.config" />
</factoryAdapter>
</logging>
</common>
最后,我的 log4net.config 是:
<log4net>
<appender name="ErrorAppender" type="log4net.Appender.BufferingForwardingAppender">
<bufferSize value="1" />
<lossy value="true" />
<evaluator type="log4net.Core.LevelEvaluator">
<threshold value="INFO" />
</evaluator>
<appender-ref ref="TraceAppender" />
</appender>
<appender name="TraceAppender" type="log4net.Appender.TraceAppender">
<threshold value="INFO" />
<filter type="log4net.Filter.LoggerMatchFilter">
<loggerToMatch value="NServiceBus.Azure.Transports.WindowsAzureServiceBus.AzureServiceBusQueueCreator" />
<acceptOnMatch value="false" />
</filter>
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="%message%newline" />
</layout>
</appender>
<root>
<level value="ALL" />
<appender-ref ref="ErrorAppender" />
</root>
</log4net>