gpt4 book ai didi

serilog - 从 Message 和 Exception 中删除新行

转载 作者:行者123 更新时间:2023-12-03 16:52:24 25 4
gpt4 key购买 nike

我在 Asp dot net core 应用程序中使用 Serilog。我希望我的日志文件是人类可读的,但也能够轻松解析。

我遇到的问题是异常是用换行符记录的。某些 Microsoft 事件的消息包含新行。

我希望能够用每行一个事件来解析日志文件。

我可以编写自己的 ITextFormatter 实现,用\r\n 替换新行,但这意味着我需要复制 MessageTemplateTextFormatter 和其他类中的大部分逻辑。

最佳答案

在深入研究了一段时间后,我能够想出一个答案。安迪韦斯特的回答为我指明了正确的方向。

这里有两个独立的问题:消息中的 CRLF 和异常中的 CRLF。

我能够通过在 outputTemplate 中将“{Message}”更改为“{Message:j}”来解决消息问题。

更改异常有点棘手。我不得不添加一个丰富的:

class ExceptionEnricher : ILogEventEnricher
{
public void Enrich(LogEvent logEvent, ILogEventPropertyFactory propertyFactory)
{
if (logEvent.Exception == null)
return;

var logEventProperty = propertyFactory.CreateProperty("EscapedException", logEvent.Exception.ToString().Replace("\r\n", "\\r\\n"));
logEvent.AddPropertyIfAbsent(logEventProperty);
}
}

这将添加一个名为 EscapedException 的新属性。这必须使用 .Enrich.With() 添加到配置中。

然后我在 outputTemplate 中用“{EscapedException}”替换了“{Exception}”。

关于serilog - 从 Message 和 Exception 中删除新行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49700265/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com