use*_*551 4 c# logging asp.net-core
我实现了自定义记录器提供程序。我的自定义记录器具有以下签名:
public void Log<TState>(LogLevel logLevel, EventId eventId,
TState state, Exception exception, Func<TState, Exception, string> formatter)
Run Code Online (Sandbox Code Playgroud)
如何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);
}
Run Code Online (Sandbox Code Playgroud)
如您所见,在这里生成JSON对象并不是什么神奇的事情。
| 归档时间: |
|
| 查看次数: |
2284 次 |
| 最近记录: |