使用 LogProperties source generator 丰富日志

这篇具有很好参考价值的文章主要介绍了使用 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");
}

 文章来源地址https://www.toymoban.com/news/detail-841065.html

您也可以传递[LogProperties]对象装饰的对象,它们将与您的消息一起记录。

使用前安装nuget包。

<PackageReference Include="Microsoft.Extensions.Telemetry.Abstractions" Version="8.3.0" />

 

然后定义一个记录日志方法,将一个对象传递给日志方法,并用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, [LogProperties] NetWorkInfo netWork);
}

logger.CouldNotOpenConnection("network err", new NetWorkInfo { IPAddress = "123.1.1", Port = 7777 });

 

运行可以看到新增的Netwrok所有属性都会添加到消息的State属性中:

使用 LogProperties  source generator 丰富日志

 

忽略属性

如果您不想在日志中包括[LogProperties]对象的特定属性,可以使用[LogPropertyIgnore]对其进行装饰:

public class NetWorkInfo
{
    public string IPAddress { get; set; }
    //从日志中移除
    [LogPropertyIgnore]
    public int Port { get; set; }
}

使用 LogProperties  source generator 丰富日志

 

原理

其原理也是使用的source generator,可在vs中看到生成的代码

使用 LogProperties  source generator 丰富日志

 

到了这里,关于使用 LogProperties source generator 丰富日志的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • jieba.net使用NuGet管理器安装后初始化TfidfExtractor对象时报错

    在引用安装jieba.net后,引用的Resources下只有如图几个文件 导致初始化TfidfExtractor时报错,报找不到 Could not find file \\\'E:\\\\TZKJNet\\\\robotindustry\\\\modules\\\\Tzkj.Superhard.SupplyDemand\\\\src\\\\Tzkj.Superhard.SupplyDemand.HttpApi.Host\\\\bin\\\\Debug\\\\net7.0\\\\Resources\\\\pos_prob_start.json\\\'. https://github.com/anderscui/jieba.NET官方说

    2024年01月23日
    浏览(82)
  • 多终端运行小程序,快速丰富智慧社区使用场景

    “智慧社区”,是指在智慧城市框架下,利用有线、无线、云计算等各种信息化技术和手段,整合社区的各类服务资源,为社区各类群体方便地提供政务、商务、娱乐、教育、医护及生活等多种社区服务。 智慧社区是社区管理的一种新理念,其建设能够有效推动经济转型,促

    2024年02月10日
    浏览(27)
  • Elasticsearch:使用 Elasticsearch ingest pipeline 丰富数据

    在我之前的文章: Elasticsearch:如何使用 Elasticsearch ingest 节点来丰富日志和指标 Elasticsearch:enrich processor (7.5发行版新功能) 我有详细描述如何使用 ingest pipeline 来丰富数据。在今天的文章中里,我们来更加详细地使用一个具体的例子来进行展示。更多官方文档描述,我们可

    2024年02月15日
    浏览(39)
  • 使用 Logstash 及 enrich processor 实现数据丰富自动化

    在我之前的文章: Elasticsearch:enrich processor (7.5发行版新功能) Elasticsearch:使用 Elasticsearch ingest pipeline 丰富数据 通过上面的两篇文章的介绍,我们应该充分掌握了如何使用 enrich processor 来丰富数据了。特别是在上面的第二篇文章中,我们需要使用手动来一个一个地通过

    2024年02月15日
    浏览(32)
  • 使用ChatGPT最新版实现批量写作,打造丰富多彩的聚合文章

    随着人工智能的迅猛发展,ChatGPT最新版作为一种自然语言处理模型,可以为我们提供强大的文本生成能力。在这篇文章中,我们将探讨如何利用ChatGPT最新版来实现批量写作,从而打造丰富多彩的聚合文章。 一、ChatGPT最新版简介 ChatGPT最新版是由OpenAI开发的一种基于大规模预

    2024年02月09日
    浏览(45)
  • uniapp中uview组件库丰富的Table 表格的使用方法

    目录 #平台差异说明 #基本使用 #兼容性 #API #Table Props #Td Props #Th Props 表格组件一般用于展示大量结构化数据的场景 #平台差异说明 App H5 微信小程序 支付宝小程序 百度小程序 头条小程序 QQ小程序 √ √ √ √ √ √ √ #基本使用 本组件标签类似HTML的table表格,由 table 、 tr 、

    2024年02月02日
    浏览(51)
  • uniapp中uview组件库丰富的CountTo 数字滚动使用方法

    目录 #平台差异说明 #基本使用 #设置滚动相关参数 #是否显示小数位 #千分位分隔符 #滚动执行的时机 #API #Props #Methods #Event 该组件一般用于需要滚动数字到某一个值的场景,目标要求是一个递增的值。 注意 如果给组件的父元素设置 text-align: center 想让数字水平居中,可能是由

    2024年02月02日
    浏览(41)
  • uniapp中uview组件库丰富的ActionSheet 操作菜单使用方法

    目录 #平台差异说明 #基本使用 #配置顶部的提示信息和底部取消按钮 #如何知道点了第几项 #API #Props #Event 本组件用于从底部弹出一个操作菜单,供用户选择并返回结果。 本组件功能类似于uni的 uni.showActionSheet API,配置更加灵活,所有平台都表现一致。 #平台差异说明 App H5 微

    2024年01月22日
    浏览(41)
  • uniapp中uview组件库丰富的CountDown 倒计时使用方法

    目录 #平台差异说明 #基本使用 #设置是否显示天,时,分,秒 #倒计时分隔符 #倒计时样式 #倒计时执行的时机 #如何获取当前倒计的秒数 #API #Props #Events #Methods 该组件一般使用于某个活动的截止时间上,通过数字的变化,给用户明确的时间感受,提示用户进行某一个行为操作

    2024年02月02日
    浏览(35)
  • 切换.net Framework 版本后,出现NuGet 包是使用不同于当前目标框架的目标框架安装的,可能需要重新安装

    由于添加新的dll文件,依赖的.NET Framework版本与当前的不一致,在vs 中切换了目标框架版本后,运行程序,出现以下的warnning信息: 一些 NuGet 包是使用不同于当前目标框架的目标框架安装的,可能需要重新安装。有关详细信息,请访问 https://docs.nuget.org/docs/workflows/reinstalling

    2024年02月16日
    浏览(43)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包