使用 LogProperties source generator 丰富日志
|
Nuget包 Microsoft.Extensions.Telemetry.Abstractions 包含的新的日志记录source generator,它支持使用[LogProperties]将整个对象作为State与日志一起记录。
我将展示一种方法来控制如何使用[LogProperties]对象自动丰富日志。
示例
您可以使用日志source generator创建一个如下所示的方法,并使用[LoggerMessage]属性对其进行装饰:- public static partial class Log
- {
- [LoggerMessage(
- EventId = 0,
- Level = LogLevel.Error,
- Message = "Can not open SQL connection {err}")]
- public static partial void CouldNotOpenConnection(this ILogger logger, string err);
- }
- private static async Task Main(string[] args)
- {
- using ILoggerFactory loggerFactory = LoggerFactory.Create(
- builder =>
- builder.AddJsonConsole(
- options =>
- options.JsonWriterOptions = new JsonWriterOptions()
- {
- Indented = true
- }));
- ILogger logger = loggerFactory.CreateLogger("Program");
- logger.CouldNotOpenConnection("network err");
- }
复制代码
您也可以传递[LogProperties]对象装饰的对象,它们将与您的消息一起记录。
使用前安装nuget包。- [/code]
- 然后定义一个记录日志方法,将一个对象传递给日志方法,并用LogProperties装饰:
- [code]public class NetWorkInfo
- {
- public string IPAddress { get; set; }
- public int Port { get; set; }
- }
- public static partial class Log
- {
- [LoggerMessage(
- EventId = 0,
- Level = LogLevel.Error,
- Message = "Can not open SQL connection {err}")]
- public static partial void CouldNotOpenConnection(this ILogger logger, string err, [LogProperties] NetWorkInfo netWork);
- }
- logger.CouldNotOpenConnection("network err", new NetWorkInfo { IPAddress = "123.1.1", Port = 7777 });
复制代码
运行可以看到新增的Netwrok所有属性都会添加到消息的State属性中:
忽略属性
如果您不想在日志中包括[LogProperties]对象的特定属性,可以使用[LogPropertyIgnore]对其进行装饰:- public class NetWorkInfo
- {
- public string IPAddress { get; set; }
- //从日志中移除
- [LogPropertyIgnore]
- public int Port { get; set; }
- }
复制代码
原理
其原理也是使用的source generator,可在vs中看到生成的代码
来源:https://www.cnblogs.com/chenyishi/p/18078355
免责声明:由于采集信息均来自互联网,如果侵犯了您的权益,请联系我们【E-Mail:cb@itdo.tech】 我们会及时删除侵权内容,谢谢合作! |
本帖子中包含更多资源
您需要 登录 才可以下载或查看,没有账号?立即注册
x
|
|
|
发表于 2024-3-18 10:00:00
举报
回复
分享
|
|
|
|