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
相关产品推荐
相关产品推荐

