我正在使用Nlog的FallbackGroup包装器来设置故障转移日志记录。如果我的第一个目标 - “网络”记录器失败/错误输出,它应该记录到第二个目标/回退目标“EventLog”。但是当我运行我的控制台应用程序时,我可以看到它只是尝试登录到第一个并且总是失败。它甚至没有尝试登录“EventLog”。仅供参考,EventLog目标在隔离状态下工作正常(没有回退设置)。
我通过在NLog上启用“InternalLogging”来获得上述细节,这基本上是将所有NLog执行写入文件。
以下是我的NLog配置:
<configuration>
<configSections>
<section name="nlog" type="NLog.Config.ConfigSectionHandler, NLog"/>
</configSections>
<nlog xmlns="http://www.nlog-project.org/schemas/NLog.xsd" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" throwExceptions="true">
<targets>
<!-- For logging over network with json layout -->
<target xsi:type="FallbackGroup" name="XXXFallBackLoggingGroup" returnToFirstOnSuccess="true">
<target name="network" xsi:type="Network" address="https://XXXX/api/log">
<layout xsi:type="JsonLayout">
<attribute name="time" layout="${longdate:universalTime=true}" />
<attribute name="level" layout="${level:upperCase=true}"/>
<attribute name="message" layout="${message}" />
</layout>
</target>
<target xsi:type="EventLog" name="eventlog" source="xxxx" layout="${level:upperCase=true}${newline}${longdate:universalTime=true}${newline}${message}${newline}"/>
</target>
</targets>
<rules>
<logger name="*" minlevel="Trace" writeTo="XXXFallBackLoggingGroup" />
</rules>
</nlog>
这让我发疯了。我已经多次尝试修复它,但没有任何效果。任何想法/建议或解决方案,请告诉我。
编辑: 我试图更新目标的名称,但这也不起作用,但正如我之前提到的,两者都是孤立的。另一点,为了测试后备日志记录,我已经删除了我的API - 第一个目标,因此它总是抛出404错误,但仍然是NLog试图选择第一个目标
答案 0 :(得分:1)
我有完全相同的问题。我注意到激活 throwExceptions 属性时。它抛出异常(它无法登录sql server数据库或其他目标)。接下来它终止了这个过程。
删除此属性,您的故障转移配置应该有效。
答案 1 :(得分:0)
https://github.com/NLog/NLog/blob/v4.4.12/src/NLog/Internal/ExceptionHelper.cs#L100
这是导致此行为的行。
如果您仍想了解配置问题,可以将 throwExcepions = true 更改为 throwConfigExceptions = true 。