广告
返回顶部
首页 > 资讯 > 后端开发 > ASP.NET >.NetCore日志记录之自定义日志组件
  • 691
分享到

.NetCore日志记录之自定义日志组件

2024-04-02 19:04:59 691人浏览 安东尼
摘要

一、前言 回顾:日志记录之日志核心要素揭秘 在上一篇中,我们通过学习了解在.net core 中内置的日志记录中的几大核心要素,在日志工厂记录器(ILoggerFactory)中实现

一、前言

回顾:日志记录之日志核心要素揭秘

在上一篇中,我们通过学习了解在.net core 中内置的日志记录中的几大核心要素,在日志工厂记录器(ILoggerFactory)中实现将日志记录提供器(ILoggerProvider)对象都可以集成到Logger对象组合中,这样的话,我们就可以通过基于ILoggerProvider自定义日志记录程序集成到Logger中,再创建写日志定义Ilogger,自定义日志记录器实现日志的输出方式,这样实现自定义日志记录工具

在这个过程中,日志记录器ILogger中的Log()方法会记录执行日志,通过在ILoggerFactory产生的是ILogger类型(也就是我们最终使用的Logger),其Log()方法是依次调用Logger中包含的LoggerInfORMation[]数组中的ILogger。而ILoggerProvider产生的为各类不同的XxxLogger(也就是上面说的Logger中的LoggerInformation数组包含的如ConsoleLogger、DebugLogger),其Log()方法是把日志写到具体的目标上去,所以我们自定义的日志程序也可以在日志记录器工厂中实现添加日志程序,达到将日志写到具体目标的作用。

所以下文我们通过自定义的方式实现ILoggerILoggerProvider两个接口来实现我们自己想要的日志记录程序,实现自定义输出目标方式。(下文只是简单的根据接口自定义实现输出日志记录到控制台的demo)

二、开始

2.1 自定义Logger

创建一个自定义Logger,目的是将指定的等级日志输出到控制台。所以我们创建一个ExtensionLogger的类,指定输出的日志等级。所以在这之前,我们需要配置一下输入日志的等级,因此我们需要增加一个等级的配置类ExtensionsConfiguration

ExtensionsConfiguration中,

public class ExtensionsConfiguration
{
    /// <summary>
    /// 日志等级
    /// </summary>
    public LogLevel LogLevel { get; set; } = LogLevel.Warning;
}

再自定义日志记录类ExtensionLogger,实现接口ILogger,

public class ExtensionsLogger : ILogger
{
    private readonly ExtensionsConfiguration _config;
    public ExtensionsLogger(ExtensionsConfiguration extensionsConfiguration)
    {
        _config = extensionsConfiguration;
    }

    public IDisposable BeginScope<TState>(TState state)
    {
        return null;
    }

    public bool IsEnabled(LogLevel logLevel)
    {
        return logLevel == _config.LogLevel;
    }

    public void Log<TState>(LogLevel logLevel, EventId eventId, TState state,
        Exception exception, Func<TState, Exception, string> formatter)
    {
        if (!IsEnabled(logLevel))
        {
            return;
        }
        Console.WriteLine($" {logLevel} - {eventId.Id} : " + formatter(state, exception));
        
    }
}

根据ILogger接口实现,其中实现Log()接口方法,将日志输出到指定目标,这里是输出到控制台,在设置了日志等级的情况条件下,当满足条件后,才能输出对应的日志。

2.2 自定义LoggerProvider

在创建了日志输出记录后,我们同时需要提供一个日志程序来增加和创建上面的Logger记录,所以我们通过自定义日志提供器类ExtensionsLoggerProvider,实现ILoggerProvider类。

public class ExtensionsLoggerProvider : ILoggerProvider
{
    private readonly ExtensionsConfiguration _config;

    public ExtensionsLoggerProvider(ExtensionsConfiguration extensionsConfiguration)
    {
        _config = extensionsConfiguration;
    }

    public ILogger CreateLogger(string cateGoryName)
    {
        return new ExtensionsLogger(_config);
    }

    public void Dispose()
    {
    }
}

基于ILoggerProvider接口实现自定义类,实现方法CreateLogger,来创建上面的日志记录。

2.3 使用

在Startup.cs中,通过Configure方法调用配置日志记录。

    public void Configure(IApplicationBuilder app, IWEBHostEnvironment env , ILoggerFactory loggerFactory)
    {
        if (env.IsDevelopment())
        {
            app.UseDeveloperExceptionPage();
        }
        // 注入ILogggerFactory,然后配置参数
        //添加日志等级
        loggerFactory.AddProvider(new ExtensionsLoggerProvider(new ExtensionsConfiguration { LogLevel= LogLevel.Warning }));
        app.UseRouting();

        app.UseAuthorization();

        app.UseEndpoints(endpoints =>
        {
            endpoints.MapControllers();
        });
    }

在此之前,我们可以清空默认的配置,然后根据日志等级,在控制台中输出对应的日志记录。

2.4 效果

在等级为Information情况下,输出效果如下:

这个就是我们通过自定义的方式实现的按日志等级输出的记录。

三、拓展

3.1 写入本地文件

第一步:为LoggerFactory扩张一个方法,提供增加日志写文件方式的入口。相关的配置来自appsettings.JSON

第二步:实现我们的logger提供程序,实现ILoggerProvider接口,关键方法CreateLogger,创建真正写日志的logger。对当前的logger可以做适当的缓存,配置logger

第三步:实现我们的logger,实现ILogger接口。真正将log写入file。

这里可以参考网友的资料 :.Net Core Logger 实现log写入本地文件系统

四、总结

  • 上文中,我们通过自定义的方式实现了根据日志等级将日志记录输出到指定目标的方式,在这种基础上,我们可以根据具体的需求做完善修改,实现自己的日志记录输出方式。

  • 除了我们通过自定义的方式之外,我们也可以借用第三方日志框架组件程序进行使用,根据拓展方法进行调用,在后续中我们会使用第三方日志记录程序来实现日志记录的输出。

  • 如果有不对的或不理解的地方,希望大家可以多多指正,提出问题,一起讨论,不断学习,共同进步。

  • 官方源码 和 参考资料

  • 本文项目源码下载

到此这篇关于.net Core自定义日志组件的文章就介绍到这了。希望对大家的学习有所帮助,也希望大家多多支持编程网。

--结束END--

本文标题: .NetCore日志记录之自定义日志组件

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

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

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

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

下载Word文档
猜你喜欢
  • .NetCore日志记录之自定义日志组件
    一、前言 回顾:日志记录之日志核心要素揭秘 在上一篇中,我们通过学习了解在.net core 中内置的日志记录中的几大核心要素,在日志工厂记录器(ILoggerFactory)中实现...
    99+
    2022-11-13
  • .NetCore日志记录之日志配置
    目录一、前言二、说明三、开始3.1 默认配置3.2 自定义配置3.2.1 代码添加提供程序3.2.2 代码添加过滤器3.2.3 配置文件自定义四、问题五、总结一、前言 在项目的开发维...
    99+
    2022-11-13
  • golang xorm 自定义日志记录器之使用zap实现日志输出、切割日志(最新)
    目录1.准备并下载好需要的包2. 连接postgresql数据库3. zap日志工具4.实现xorm 自定义日志记录器5.使用完整代码参考文档1.准备并下载好需要的包 xorm.io...
    99+
    2022-11-11
  • .Net Core怎么自定义日志组件
    这篇文章主要介绍“.Net Core怎么自定义日志组件”,在日常操作中,相信很多人在.Net Core怎么自定义日志组件问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”.Net C...
    99+
    2023-07-02
  • Laravel-admin之自定义操作日志
    laravel-admin是封装性极好的框架,自带的就有操作日志的记录,但是对于非开发人员可能看不懂这个日志,所以就想着给修改一下,以谁修改了什么,谁删除了什么,谁审核了什么,谁添加了什么类似,这样才...
    99+
    2023-09-23
    laravel laravel-admin
  • JMeter自定义日志与日志分析的实现
    目录1 JMeter日志概览2 JMeter自定义日志3 JMeter日志分析1 JMeter日志概览 JMeter与Java程序一样,会记录事件日志,日志文件保存在bin目录中,名...
    99+
    2022-11-12
  • SpringBoot自定义注解异步记录复杂日志详解
    目录1、背景2、技术方案-自定义注解2.1 注解介绍2.2 元注解2.3 实现自定义注解3、技术方案-AOP切面3.1 AOP术语解析3.2 切入点表达式3.3 ADVICE通知类型...
    99+
    2022-11-13
  • 如何实现JMeter自定义日志与日志分析
    这篇文章主要介绍如何实现JMeter自定义日志与日志分析,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!1 JMeter日志概览JMeter与Java程序一样,会记录事件日志,日志文件保存在bin目录中,名称为jmet...
    99+
    2023-06-22
  • 如何使用Java重定向日志接口记录日志?
    当我们开发一个Java应用程序时,记录日志是非常重要的一个环节。Java提供了多种日志框架,如Log4j、Logback等。其中,重定向日志接口是一种常用的记录日志的方式。 在这篇文章中,我们将介绍如何使用Java重定向日志接口记录日志。我...
    99+
    2023-11-05
    重定向 日志 接口
  • logback怎么自定义指定日志文件存储目录
    这篇文章主要介绍“logback怎么自定义指定日志文件存储目录”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“logback怎么自定义指定日志文件存储目录”文章能帮助大家解决问题。logback自定义...
    99+
    2023-07-05
  • 开源日志记录组件Log4Net怎么用
    这篇文章主要介绍了开源日志记录组件Log4Net怎么用,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。log4net是.Net下一个非常优秀的开源日志记录组件。log4net记...
    99+
    2023-06-03
  • MySQL系列之十一 日志记录
    系列教程 MySQL系列之开篇 MySQL关系型数据库基础概念 MySQL系列之一 MariaDB-server安装 MySQL系列之二 多实例配置 MySQL系列之三 基础篇...
    99+
    2022-11-12
  • ThinkPHP下 自定义日志输出
    项目场景: 不想调用TP的 think/Log类工具,而是自定义日志的输出路径、文件名和内容: 解决方案: 提示:这里填写该问题的具体解决方案: 首先在common.php公共函数文件下写需...
    99+
    2023-10-12
    php 开发语言
  • ASP.NET Core使用自定义日志中间件
    这个日志框架使用的是ASP.NET Core的NLog,用来记录每次请求信息和返回信息。 1.首先创建一个Web应用项目,我选择的是MVC模板: 2.使用NuGet添加Micros...
    99+
    2022-11-13
  • .NetCore手动封装日志组件的实现代码
    背景 1、支持写入文本和写入ELK; 2、支持.netcore3.1和 .Net5(也可支持.Net6) 3、基于Serilog 开源的日志组件进行开发;将预定义的配置,逻辑代码都写...
    99+
    2022-11-13
  • Spring AOP实现复杂的日志记录操作(自定义注解)
    目录Spring AOP复杂的日志记录(自定义注解)第一步第二步第三步第四步多个注解可以合并成一个,包括自定义注解比如说SpringMVC的注解Spring AOP复杂的日志记录(自...
    99+
    2022-11-12
  • 详解SpringBoot Start组件开发之记录接口日志信息
    目录前言目标设计测试总结前言 不积跬步无以至千里,不积小流,无以成江海 在公司一般来说,都只会接触一些CRUD的业务,很多时候可能你想设计很多的代码结构,但是时间不允许。近期接到一个...
    99+
    2023-05-18
    SpringBoot-Start组件开发 记录接口日志信息
  • Python开发之日志记录模块:logg
    最近在开发一个应用软件,为方便调试和后期维护,在代码中添加了日志,用的是Python内置的logging模块,看了许多博主的博文,颇有所得。不得不说,有许多博主大牛总结得确实很好。似乎我再写关于logging的博文有些多余,但不写总结又...
    99+
    2023-01-31
    模块 日志 Python
  • log4j如何自定义日志级别
    要自定义日志级别,您可以按照以下步骤进行操作:1. 创建一个自定义的日志级别。在Log4j中,日志级别是通过`Level`类表示的。...
    99+
    2023-09-13
    log4j
  • logback如何自定义日志存储
    目录logback自定义日志存储1、配置lockback.xml2、配置自定义日志操作类3、调用方法使用logback进行系统日志记录logback自定义日志存储 1、配置lockb...
    99+
    2022-11-12
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作