You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

NLog 4.7实现AMQP事件日志截断:主日志仅保留首行

解决方案

要实现你的需求,不能依赖NLog过滤器(它仅能控制日志是否记录,无法修改日志内容),需要通过布局的条件渲染来处理主日志中的AMQP事件,具体配置如下:

完整NLog配置示例

<targets>
  <!-- 主日志文件:对AMQP事件仅保留首行,其他日志正常输出 -->
  <target name="file" xsi:type="File" fileName="main.log">
    <layout>
      ${when:condition=starts-with(message, 'Published Event'):inner=${replace:input=${message}:searchFor=(\r\n|\n).*:replaceWith=:regex=true}:else=${message}}
    </layout>
  </target>

  <!-- AMQP专用日志文件:保留完整的事件内容 -->
  <target name="amqpEvents" xsi:type="File" fileName="amqp-events.log" />
</targets>

<rules>
  <!-- 所有日志写入主日志(自动处理AMQP事件截断) -->
  <logger name="*" minlevel="Debug" writeTo="file" />

  <!-- 仅将AMQP事件写入专用日志 -->
  <logger name="*" minlevel="Debug" writeTo="amqpEvents">
    <filters defaultAction="Ignore">
      <when condition="starts-with(message, 'Published Event')" action="Log"/>
    </filters>
  </logger>
</rules>

关键配置说明

  • ${when}布局渲染器:NLog 4.7原生支持,根据条件分支处理消息。当消息以Published Event开头时,执行截断逻辑;否则直接输出原消息。
  • ${replace}正则替换:启用regex=true后,用(\r\n|\n).*匹配第一个换行符(兼容Windows/Unix换行格式)及之后的所有内容,替换为空字符串,仅保留首行。
  • 专用日志规则:保持你原有的过滤器配置,确保只有AMQP事件写入专用日志且内容完整。

内容的提问来源于stack exchange,提问作者mamen

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.09 15:57:36