iis服务器助手广告广告
返回顶部
首页 > 资讯 > 精选 >.NET 6开发TodoList应用中如何引入第三方日志库
  • 397
分享到

.NET 6开发TodoList应用中如何引入第三方日志库

2023-06-22 06:06:01 397人浏览 薄情痞子
摘要

这篇文章将为大家详细讲解有关.net 6开发TodoList应用中如何引入第三方日志库,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。1.需求在我们项目开发的过程中,使用.NET 6自带的日志系统

这篇文章将为大家详细讲解有关.net 6开发TodoList应用中如何引入第三方日志库,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。

    1.需求

    在我们项目开发的过程中,使用.NET 6自带的日志系统有时是不能满足实际需求的,比如有的时候我们需要将日志输出到第三方平台上,最典型的应用就是在各种云平台上,为了集中管理日志和查询日志,通常会选择对应平台的日志SDK进行集成。使用Serilog提供的多种Sink,可以实现将日志写入不同云平台或者是非云平台的日志存储中去,这是我们这篇文章讲要研究的内容。

    2.目标

    我们将为TodoList添加一个方便替换和扩展的日志策略,简单来说就是在与具体第三方打交道的Infrastructure项目中实际设置使用的日志服务,并在api项目中进行依赖注入,方便在整个应用程序中无具体日志配置感知地使用日志服务。

    3.原理和思路

    查阅Serilog的官方文档和一些示例后确定,

    我们要做的事情有这么几件:

    • 引入Serilog.Aspnetcore包(很多文章或者教程里都让你根据需要使用的Sink去继续引入类似Serilog.Sink.File之类的包,但是实际上Serilog.AspNetCore包的依赖项里已经包含了File这个Sink,所以实际上没有必要再去添加一次);

    • 二是需要为Serilog的Logger对象提供一个LoggerConfiguration,可以以代码的方式进行配置,也可以通过加载.JSON文件的方式进行配置,看自己的需求和对配置热更新的有没有独特的要求决定;

    • 在程序启动构造WEBApplicationBuilder对象的时候声明UseSerilog();

    • 在需要使用日志的地方注入ILogger<T>对象即可,我们一般是在构造函数里进行注入,当然也可以选择其他两种注入方式。

    好了,了解了原理,接下来一步就是想一下我们要在哪里做这几件事。

    在第二篇文章中,我提到了Clean Architecture,里面有一条原则可以理解为:如果系统需要与外部(第三方)系统进行集成或交互,那么具体的集成工作应该放入Infrastructure层进行处理,而程序的其他部分只对外部服务进行抽象的使用。好处是今后如果需要替换第三方系统,比如原本日志是写到本地文件里,后来有了上云和日志集中化处理的需求,需要将日志服务对接到诸如Azure App Service Logging者AWS CloudWatch,那么我们只需要去修改(扩展)Infrastructure中进行日志具体配置的逻辑就可以了。虽然日志服务本身相对比较简单,还不能很好地体现这个优点,我们姑且遵循这个原则,将配置工作放到Infrastructure里面去。

    4.实现

    4.1日志配置实现

    我们在TodoList.Infrastructure项目中新增一个文件夹,取名Log,在其中新建文件ConfigureLogProvider.cs,实现一个针对WebApplicationBuilder的扩展方法,为了演示在这里配置的扩展性,我多用了一个appsettings.json中的字段来控制配置过程,缺失的包需要安装一下。

    using Microsoft.AspNetCore.Builder;using Microsoft.Extensions.Configuration;using Serilog;namespace TodoList.Infrastructure.Log;public static class ConfigureLogProvider{    public static void ConfigureLog(this WebApplicationBuilder builder)    {        if (builder.Configuration.GetValue<bool>("UseFileToLog"))        {            // 配置同时输出到控制台和文件,并且指定文件名和文件转储方式(形如log-20211219.txt格式),转储文件保留的天数为15天,以及日志格式            // 配置Enrich.FromLoGContext()的目的是为了从日志上下文中获取一些关键信息诸如用户ID或请求ID,我们的应用中暂时不使用这些。            Serilog.Log.Logger = new LoggerConfiguration()                .Enrich.FromLogContext()                .WriteTo.Console()                .WriteTo.File(                    "logs/log-.txt",                    outputTemplate: "{Timestamp:yyyy-MM-dd HH:mm:ss.fff zzz} [{Level:u3}] {Message:lj}{NewLine}{Exception}",                    rollingInterval: RollingInterval.Day,                    retainedFileCountLimit: 15)                .CreateLogger();        }        else        {            // 仅配置控制台日志            Serilog.Log.Logger = new LoggerConfiguration()                .Enrich.FromLogContext()                .WriteTo.Console()                .CreateLogger();        }        // 使用Serilog作为日志框架,注意这里和.NET 5及之前的版本写法是不太一样的。        builder.Host.UseSerilog();    }}

    4.2主程序配置

    在TodoList.Api项目的Main.cs中,使用该扩展方法:

    using TodoList.Infrastructure.Log;var builder = WebApplication.CreateBuilder(args);// Add services to the container.// 配置日志builder.ConfigureLog();builder.Services.AddControllers();// ... 省略以下

    并向appsettings.Development.json文件中添加用于测试的配置项:

    {  "Logging": {    "LogLevel": {      "Default": "InfORMation",      "Microsoft.AspNetCore": "Warning"    }  },  "UseFileToLog": true}

    4.3注入使用

    嗯……我把第二篇文章结束时删除的示例WeatherForecastController.csWeatherForecast.cs又加回来了。Controller中已经注入了ILogger<WeatherForecastController>,我们就在示例的接口里试一下:

    [HttpGet(Name = "GetWeatherForecast")]public IEnumerable<WeatherForecast> Get(){    // 记录日志    _logger.LogInformation($"maybe this log is provided by Serilog...");    return Enumerable.Range(1, 5).Select(index => new WeatherForecast    {        Date = DateTime.Now.ADDDays(index),        TemperatureC = Random.Shared.Next(-20, 55),        Summary = Summaries[Random.Shared.Next(Summaries.Length)]    })    .ToArray();}

    好了,到此为止我们就可以验证一下了。

    5.验证

    运行TodoList.Api项目,和第二篇文章一样,我们使用Hoppscotch测试示例接口,观察控制台和日志文件的输出内容和格式:

    控制台输出

    .NET 6开发TodoList应用中如何引入第三方日志库

    文件输出

    .NET 6开发TodoList应用中如何引入第三方日志库

    .NET 6开发TodoList应用中如何引入第三方日志库

    关于“.NET 6开发TodoList应用中如何引入第三方日志库”这篇文章就分享到这里了,希望以上内容可以对大家有一定的帮助,使各位可以学到更多知识,如果觉得文章不错,请把它分享出去让更多的人看到。

    --结束END--

    本文标题: .NET 6开发TodoList应用中如何引入第三方日志库

    本文链接: https://www.lsjlt.com/news/302872.html(转载时请注明来源链接)

    有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

    本篇文章演示代码以及资料文档资料下载

    下载Word文档到电脑,方便收藏和打印~

    下载Word文档
    猜你喜欢
    • .NET 6开发TodoList应用引入第三方日志库
      目录1.需求2.目标3.原理和思路4.实现4.1日志配置实现4.2主程序配置4.3注入使用5.验证1.需求 在我们项目开发的过程中,使用.NET 6自带的日志系统有时是不能满足实际...
      99+
      2024-04-02
    • .NET 6开发TodoList应用中如何引入第三方日志库
      这篇文章将为大家详细讲解有关.NET 6开发TodoList应用中如何引入第三方日志库,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。1.需求在我们项目开发的过程中,使用.NET 6自带的日志系统...
      99+
      2023-06-22
    • .NET 6开发TodoList应用中如何引入数据存储
      小编给大家分享一下.NET 6开发TodoList应用中如何引入数据存储,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧!一.需求作为后端CRUD程序员(bushi,数据存储是开发后端服务一个非常重要的组件。对我们的...
      99+
      2023-06-22
    • .NET 6开发TodoList应用之请求日志组件HttpLogging介绍
      背景 因为在上篇演示Action Filter的时候可能是因为举的例子不够好,有小伙伴在评论区指出.NET 6新增加的特性可以实现在视图模型绑定之前允许记录Http请求日志的组件:H...
      99+
      2024-04-02
    • 怎么使用.NET 6开发TodoList应用引入数据存储
      本篇内容主要讲解“怎么使用.NET 6开发TodoList应用引入数据存储”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“怎么使用.NET 6开发TodoList应用引入数据存...
      99+
      2023-06-22
    • .NET 6开发TodoList应用之如何实现PUT请求
      这篇文章将为大家详细讲解有关.NET 6开发TodoList应用之如何实现PUT请求,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。需求PUT请求本身其实可说的并不多,过程也和创建基本类似。在这篇...
      99+
      2023-06-22
    • 使用.NET 6开发TodoList应用之引入数据存储的思路详解
      目录需求目标原理和思路实现1. 引入Nuget包并进行配置2. 添加DBContext对象并进行配置3. 配置文件修改4. 主程序配置5. 本地运行MSSQL Server容器及数据...
      99+
      2024-04-02
    • .NET 6开发TodoList应用中如何实现全局异常处理
      本篇文章为大家展示了.NET 6开发TodoList应用中如何实现全局异常处理,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。需求因为在项目中,会有各种各样的领域异常或系统异常被抛出来,那么...
      99+
      2023-06-22
    • 如何在Clion中引入第三方库
      如何在Clion中引入第三方库?相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。如何配置CMake的所有配置都写在一个叫CMakeLists.txt的文件当中,所有的配置都写在该文...
      99+
      2023-06-06
    • .NET 6开发TodoList应用中如何实现DELETE请求与HTTP请求幂等性
      本篇文章为大家展示了.NET 6开发TodoList应用中如何实现DELETE请求与HTTP请求幂等性,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。需求先说明一下关于原本想要去更新的PAT...
      99+
      2023-06-22
    • Angular-Cli中如何引用第三方库
      这篇文章给大家分享的是有关Angular-Cli中如何引用第三方库的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。初试我最初的想法是直接将相对路径写到index.html即可,如下...
      99+
      2024-04-02
    • github项目中如何引用第三方库
      本文小编为大家详细介绍“github项目中如何引用第三方库”,内容详细,步骤清晰,细节处理妥当,希望这篇“github项目中如何引用第三方库”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。Github是全球最大的开...
      99+
      2023-07-05
    • C#开发中如何处理第三方库的使用问题
      C#开发中如何处理第三方库的使用问题引言:在C#开发中,使用第三方库可以提高开发效率,拓宽功能范围,并且常常可以避免重新发明轮子的尴尬。然而,使用第三方库也会带来一些问题,如版本兼容性、文档不全等。本文将介绍一些常见的处理第三方库使用问题的...
      99+
      2023-10-22
      第三方库选择 接入第三方库方法
    • Android开发中如何使用Intent打开第三方应用及验证可用性
      小编给大家分享一下Android开发中如何使用Intent打开第三方应用及验证可用性,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧!具体如下:Android中提供了Intent机制来协助应用间的交互与通讯。可作为不同组件之间...
      99+
      2023-05-30
      android intent
    • Git版本控制在Java开发中的应用:如何规范化日志记录?
      Git是一种流行的版本控制系统,广泛应用于Java开发中。在Java开发中,版本控制和日志记录是非常重要的。本文将介绍如何在Java开发中使用Git版本控制,并规范化日志记录。同时,本文将通过演示代码来帮助读者更好地理解。 一、Git版本控...
      99+
      2023-08-07
      面试 日志 git
    • 如何使用 Python Spring 开发技术日志记录来诊断和解决应用程序中的错误?
      Python Spring 是一种流行的开发框架,它提供了许多强大的工具来帮助开发人员构建高质量的应用程序。其中一个重要的工具就是技术日志记录,它可以帮助开发人员诊断和解决应用程序中的错误。在本文中,我们将探讨如何使用 Python Spr...
      99+
      2023-07-05
      spring 开发技术 日志
    软考高级职称资格查询
    编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
    • 官方手机版

    • 微信公众号

    • 商务合作