gpt4 book ai didi

c# - 记录器提供程序 : How can I implement a custom formatter

转载 作者:行者123 更新时间:2023-12-02 17:31:50 25 4
gpt4 key购买 nike

我实现了一个自定义记录器提供程序。我的自定义记录器具有以下签名:

public void Log<TState>(LogLevel logLevel, EventId eventId, 
TState state, Exception exception, Func<TState, Exception, string> formatter)

formatter 是如何传递的?

如何实现自定义格式化程序?假设我希望它以 JSON 格式格式化所有内容

我是 Net Core 新手,我不完全理解它是如何工作的。

最佳答案

Func<TState, Exception, string> formatter传递给您的函数的函数基本上只是一个实用函数,用于将状态转换为单个字符串消息。在你的记录器中,你基本上只是需要调用 formatter(state, exception)获取应记录的格式化消息。

通常,除了调用它来获取格式化消息之外,您实际上并不需要关心该函数,所以这就是所有记录器通常所做的事情。出于 JSON 记录器的目的,您可以完全忽略它,或者至少也导出格式化的消息,以便它作为可读字符串存在。

快速而肮脏的 JSON 记录器 Log方法实际上可能如下所示:

public void Log<TState>(LogLevel logLevel, EventId eventId, TState state, Exception exception, Func<TState, Exception, string> formatter)
{
var jsonLine = JsonConvert.SerializeObject(new {
logLevel,
eventId,
parameters = (state as IEnumerable<KeyValuePair<string, object>>)?.ToDictionary(i => i.Key, i => i.Value),
message = formatter(state, exception),
exception = exception?.GetType().Name
});

// store the JSON log message somewhere
Console.WriteLine(jsonLine);
}

正如您所看到的,在这里生成 JSON 对象并没有那么神奇。

关于c# - 记录器提供程序 : How can I implement a custom formatter,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46954352/

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