我可以在 NLog 的一个目标中使用两种不同的布局吗?
Can I use two different layouts in one target in NLog?
我在 nlog.config 中有两个布局。一次是默认布局,另一个是 ErrorLayout,其中具有其他属性。
问题是我想添加目标,我想为 LogLevel.Error 使用两种布局,我必须使用 ErrorLayout,对于其他级别,我必须使用 DefaultLayout。我不想创建两个目标,因为两个目标创建两个不同的文件并将日志存储到其中。
但我想将两者布局到一个目标中。
我能做到吗?如何 ?
谁能帮我做这个?
现在你的 DefaultLayout
和 ErrorLayout
很简单,所以你可以这样做:
<nlog>
<variable name="DefaultLayout" value="${message}" />
<variable name="ErrorLayout" value="${message} ${exception:format=tostring}" />
<variable name="DynamicLayout= value="${when:when=level<=LogLevel.Info:inner=${DefaultLayout}:else=${ErrorLayout}}" />
<targets>
<target type="file" name="erp" layout="${DynamicLayout}" fileName="log-${shortdate}.log" />
</targets>
<rules>
<logger name="*" minLevel="Debug" writeTo="erp" />
</rules>
</nlog>
另见 https://github.com/nlog/NLog/wiki/When-Layout-Renderer
请注意,如果您在 ErrorLayout 中包含繁重的布局渲染,NLog 的性能可能会很差。前任。喜欢 ${callsite}
另一种选择是使用两个目标,以同一个文件为目标。如果你不启用keepfileopen,那么这也是一个很好的解决方案。
例如:
<nlog>
<targets>
<target type="file" name="erp" layout="${message}" fileName="log-${shortdate}.log" />
<target type="file" name="erp-error" layout="${message} ${exception:format=tostring}" fileName="log-${shortdate}.log" />
</targets>
<rules>
<logger name="*" minLevel="Error" writeTo="erp-error" final="true" /> <!-- after match events won't be processed futher due to the final attribute -->
<logger name="*" minLevel="Debug" writeTo="erp" />
</rules>
</nlog>
我在 nlog.config 中有两个布局。一次是默认布局,另一个是 ErrorLayout,其中具有其他属性。 问题是我想添加目标,我想为 LogLevel.Error 使用两种布局,我必须使用 ErrorLayout,对于其他级别,我必须使用 DefaultLayout。我不想创建两个目标,因为两个目标创建两个不同的文件并将日志存储到其中。 但我想将两者布局到一个目标中。 我能做到吗?如何 ? 谁能帮我做这个?
现在你的 DefaultLayout
和 ErrorLayout
很简单,所以你可以这样做:
<nlog>
<variable name="DefaultLayout" value="${message}" />
<variable name="ErrorLayout" value="${message} ${exception:format=tostring}" />
<variable name="DynamicLayout= value="${when:when=level<=LogLevel.Info:inner=${DefaultLayout}:else=${ErrorLayout}}" />
<targets>
<target type="file" name="erp" layout="${DynamicLayout}" fileName="log-${shortdate}.log" />
</targets>
<rules>
<logger name="*" minLevel="Debug" writeTo="erp" />
</rules>
</nlog>
另见 https://github.com/nlog/NLog/wiki/When-Layout-Renderer
请注意,如果您在 ErrorLayout 中包含繁重的布局渲染,NLog 的性能可能会很差。前任。喜欢 ${callsite}
另一种选择是使用两个目标,以同一个文件为目标。如果你不启用keepfileopen,那么这也是一个很好的解决方案。
例如:
<nlog>
<targets>
<target type="file" name="erp" layout="${message}" fileName="log-${shortdate}.log" />
<target type="file" name="erp-error" layout="${message} ${exception:format=tostring}" fileName="log-${shortdate}.log" />
</targets>
<rules>
<logger name="*" minLevel="Error" writeTo="erp-error" final="true" /> <!-- after match events won't be processed futher due to the final attribute -->
<logger name="*" minLevel="Debug" writeTo="erp" />
</rules>
</nlog>