gpt4 book ai didi

c# - Serilog - 如何手动将格式化消息呈现为字符串?

转载 作者:行者123 更新时间:2023-11-30 13:55:17 24 4
gpt4 key购买 nike

我编写了一个日志记录框架,可以交替使用 Log4Net、Nlog 和 Serilog。每次调用记录器,都会在写入日志条目之前触发一个事件。这可以选择通过 SignalR 将条目推送到连接的 Web 客户端。

在添加serilog之前,我使用string.Format来获取格式化的文本。现在随着巨大的破坏而来的是巨大的责任。 string.Format 显然不喜欢字符串中的 {@0} 或 {data}。

// log the event before engaging with the logger
LogEventBus.Handle(LogLevels.Info, DateTime.Now, msg, args);
if (DiagnosticLevel < level)
return;
_logger.Info(msg, args);

有什么方法可以直接将 serilog 生成的输出作为字符串?

我开始编写内存接收器,但它脱离了我基于集中式事件的日志记录,并完全脱离了我已经实现的其他库。

有什么建议吗?

最佳答案

您可以像这样将 Serilog 的消息格式转换为标准的 .NET 格式字符串({0} 等):

var parser = new MessageTemplateParser();
var template = parser.Parse(templateMessage);
var format = new StringBuilder();
var index = 0;
foreach (var tok in template.Tokens)
{
if (tok is TextToken)
format.Append(tok);
else
format.Append("{" + index++ + "}");
}
var netStyle = format.ToString();

一旦你有了一个标准格式的字符串,你就可以传递它或者使用 string.Format()args

它不会非常高效 - 更深入地连接到 Serilog pipleine (ILogEventEnricher) 应该会更好。正如另一位评论者所建议的那样,最好只在此处采用单个日志记录框架。

关于c# - Serilog - 如何手动将格式化消息呈现为字符串?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35853003/

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