文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

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

2024-04-02 19:55

关注

一、前言

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

在上一篇中,我们通过学习了解在.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自定义日志组件的文章就介绍到这了。希望对大家的学习有所帮助,也希望大家多多支持编程网。

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯