魏晓东 发表于 2024-5-14 12:37:11

使用 LogProperties source generator 丰富日志

Nuget包 Microsoft.Extensions.Telemetry.Abstractions 包含的新的日志记载source generator,它支持使用将整个对象作为State与日志一起记载。
我将展示一种方法来控制如何使用对象自动丰富日志。
示例
您可以使用日志source generator创建一个如下所示的方法,并使用属性对其进行装饰:
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");

您也可以传递对象装饰的对象,它们将与您的消息一起记载。
使用前安装nuget包。
 
然后定义一个记载日志方法,将一个对象传递给日志方法,并用LogProperties装饰:
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, NetWorkInfo netWork);
}

logger.CouldNotOpenConnection("network err", new NetWorkInfo { IPAddress = "123.1.1", Port = 7777 }); 
运行可以看到新增的Netwrok所有属性都会添加到消息的State属性中:
https://img2024.cnblogs.com/blog/1033233/202403/1033233-20240317111455073-1337656880.png
 
忽略属性
如果您不想在日志中包括对象的特定属性,可以使用对其进行装饰:
public class NetWorkInfo
{
    public string IPAddress { get; set; }
    //从日志中移除
   
    public int Port { get; set; }
}https://img2024.cnblogs.com/blog/1033233/202403/1033233-20240317111627296-1480340517.png
 
原理
其原理也是使用的source generator,可在vs中看到生成的代码
https://img2024.cnblogs.com/blog/1033233/202403/1033233-20240317111903338-110726799.png
 

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
页: [1]
查看完整版本: 使用 LogProperties source generator 丰富日志