第4章 配置集成第3方log4net日志中间件
创始人
2024-02-09 02:28:04
0

    在上一章中虽然已经把第3方log4net日志中间件定义到了当前程序中,但是并没有把第3方log4net日志中间件的功能配置并集到当前程序中,即当前程序还不能通过第3方log4net日志中间件把日志数据信息持久化到指定的文件或表中,本章即将实现当前程序对第3方log4net日志中间件的配置集成

1 日志实例的文件持久化集成

1.1 重构appsettings.json

  "AppSettings": {

    //"RedisCachingAOP": {

    //  "Enabled": false

    //},

    //"MemoryCachingAOP": {

    //  "Enabled": true

    //},

    "LogAOP": {

      "Enabled": "true",

      "LogToFile": {

        "Enabled": true

      },

      "LogToDB": {

        "Enabled": true

      }

    },

    "TranAOP": {

      "Enabled": true

    },

    "SqlAOP": {

      "Enabled": true,

      "LogToFile": {

        "Enabled": true

      },

      "LogToDB": {

        "Enabled": true

      },

      "LogToConsole": {

        "Enabled": true

      }

    },

    //"Date": "2018-08-28",

    "SeedDBEnabled": true, //只生成表结构

    "SeedDBDataEnabled": true, //生成表,并初始化数据

    //"Author": "Blog.Core",

   // "SvcName": "", // /svc/blog

    ///"UseLoadTest": false

  },

1.2 重构 Extensions.ServiceExtensions.SqlsugarSetup.AddSqlsugarSetup方法

if (AppSettings.app(new string[] { "AppSettings", "SqlAOP", "Enabled" }).ObjToBool())

                                {

                                    if (AppSettings.app(new string[] { "AppSettings", "SqlAOP", "LogToFile", "Enabled" }).ObjToBool())
    按F5执行程序后,会自动把日志实例持久化到启动项中的指定文件中,但是因为没有定义log4net日志中间件过滤配置,所以该文件中的信息非常的多且不必要,如下图所示:

1.3 实例化第3方“log4net”日志中间件

        //通过设定的持久化过滤规则及其配置文件(Log4net.config)中的数据实例,实例化第3方“log4net”日志中间件,最后把第3方“log4net”日志中间件依赖注入到内置容器中。

//注意:原示例代码是把把第3方“log4net”日志中间件依赖注入到内置依赖注入第3方“Autofac”容器中。

builder.Services.AddLogging(loging => {

    //第3方“log4net”日志中间件持久化过滤规则:在持久化时,过滤掉带有"System"命名空间的日志信息实例。

    loging.AddFilter("System", LogLevel.Error);

    //第3方“log4net”日志中间件持久化过滤规则:在持久化时,过滤掉带"Microsoft"命名空间的日志信息实例。

    loging.AddFilter("Microsoft", LogLevel.Error);

    loging.SetMinimumLevel(LogLevel.Error);

});

    注意:

  1. 上面的定义并不包含配置文件(Log4net.config),因为配置文件(Log4net.config)主要是针对于数据库中的日志表,所以本人会在下面的日志实例的表持久化集成中进重构。
  2. 通过第3方“log4net”日志中间件把日志实例的持久化到日志文件中只依赖于中间件:log4net,被直接引用在“Common”项目中。

    在实例化了带有持久化过滤规则定义的“log4net”日志中间件实例后,log4net日志中间件就会对日志实例中的数据进行过滤,那么日志文件中的持久化数据就会明显的减少,如下图所示:

2 日志实例的表持久化集成

    由于不能通过示例中的配置文件实现通过“log4net”日志中间件把日志实例持久化到指定的表中,本人对“Log4net.config”配置文件进行了重新的定义其定义如下

2.1 重新的定义“Log4net.config”配置文件

   

   

       

       

       

       

       

       

       

       

       

       

       

       

       

       

       

       

       

       

       

       

           

           

       

       

           

       

   

   

   

   

   

       

       

       

       

       

       

           

           

           

       

       

           

           

           

           

               

           

       

       

           

           

           

           

               

           

       

       

           

           

           

           

               

           

       

       

           

           

           

           

               

           

       

       

           

           

           

           

               

           

       

       

           

           

           

           

               

           

       

       

           

           

           

           

       

   

   

       

       

       

       

       

       

       

       

       

       

       

       

   

2.2 重构实例化第3方“log4net”日志中间件的定义

//通过设定的持久化过滤规则及其配置文件(Log4net.config)中的数据实例,实例化第3方“log4net”日志中间件,最后把第3方“log4net”日志中间件依赖注入到内置容器中。

//注意:原示例代码是把把第3方“log4net”日志中间件依赖注入到内置依赖注入第3方“Autofac”容器中。

builder.Services.AddLogging(loging => {

    //第3方“log4net”日志中间件持久化过滤规则:在持久化时,过滤掉带有"System"命名空间的日志信息实例。

    loging.AddFilter("System", LogLevel.Error);

    //第3方“log4net”日志中间件持久化过滤规则:在持久化时,过滤掉带"Microsoft"命名空间的日志信息实例。

    loging.AddFilter("Microsoft", LogLevel.Error);

    loging.SetMinimumLevel(LogLevel.Error);

    loging.AddLog4Net("Log4net.config");

});


2.3 定义对日志实例进行持久化支撑的实体:GblLogAudit

008 GblLogAudit

GblLogAudit:继承了RootEntityTkey,通过该实体类及其属性成员,用于实现“log4net”日志中间件与“[Blog].[GblLogAudit]”表之间的CURD的插入操作,并把这些数据存储到数据库设置实例中(内存)。

  注意:

该实体类所对应的表是在“Code-First”模式下,由“SqlSugar”中间件自动生成;但插入操作通过“log4net”日志中间件,即“SqlSugar”中间件只能读取“[Blog].[GblLogAudit]”表,而不能对该表进行增/修/删等操作。 

        按F5执行程序后会自动把当前程序中的日志实例持久化到“[Blog].[GblLogAudit]”表中,如下图所示:

注意:

  1. 通过第3方“log4net”日志中间件把日志实例的持久化到表中只依赖于2个中间件:

(1)、“Microsoft.Extensions.Logging.Log4Net.AspNetCore”,被直接引用在“Extensions”项目中。

(2)、“System.Data.SqlClient”,被直接引用在启动项目中。

(3)、在原示例程序中并没有“System.Data.SqlClient”的直接引用。

        2、配置文件中的数据库提供程序的连接字符不要带版本和公共密钥信息,否则会导致不能被持久化到表中。

正确示例:

              错误示例:

3、对于日志实例的持久化解决方案本人的看法:

第3方log4net日志中间件<第3方Nlog日志中间件<完全自定义,第3方Nlog日志中间件虽然在配置上可能相比第3方log4net日志中间件麻烦,但功能和可读性上比第3方log4net日志中间件安强的多;而完全自定义则可以保证实体类的定义实现的一致性,只获取自己需要被持久化的数据,强化了开发者对整个人程序的控制力。

4、Bug:由于“[Blog].[GblLogAudit]”表是在“Code-First”模式自动生成,所以在第1次执行程序时“[Blog].[GblLogAudit]”表中是无任何数据的,只有再次执行程序表中才有数据。

对以上功能更为具体实现和注释见:221123_04Blog(配置集成第3方log4net日志中间件)。

相关内容

热门资讯

2015句子签名大全精选34... 2015句子签名大全 精选73句1. 明知道谁都离不开谁,却偏偏要互相折磨。2. I will al...
工业循环水水质分析 工业循环水水质分析工业循环水水质化验项目及方法循环冷却水 PH 值的测定方法方法:PH 计直接测定 ...
简单气质个性签名女生   我这一生要走多远的路程,什么时候才能停下,简单气质个性签名女生。下面是unjs小编为大家分享有关...
诗意的帮派名字300个 诗意的帮派名字300个  好名字的好处  在易经预测体系里,影响我们人生运势的有风水、数字、名字。名...
中考激励自己的座右铭 中考激励自己的座右铭  1、师生共同努力,成就六月辉煌。  2、沉着冷静,周密思考,认真严谨,仔细答...
人生哲理箴言签名 人生哲理箴言签名  人生不必求全责备,有道是:自古人生最忌满,半贫半富半自安!半命半天半机遇,半取半...
女孩取名内涵诗意名字 女孩取名内涵诗意名字  女孩取名内涵诗意名字  名字是指人或者产品、物体的名称,姓名有广义与狭义之分...
人生品质座右铭 人生品质座右铭  1、 帮助别人,可不是统治别人。  2、 不要顾虑昨天的事,安排好明日的计划。  ...
阳光的个性签名 阳光的个性签名精选  阳光的你,值得拥有一个阳光的感兴趣吗。下面小编给大家带来阳光的个性签名精选。希...
群名字(精选500个) 群名字(精选500个)  一、网名的介绍  网名指在网上使用的名字。由于网络它是一个虚拟里的世界,为...
我的座右铭作文500字精选1... 我的座右铭作文500字 第一篇如果你本来非常的勤奋,但是,在以后你嬉皮笑脸,非常的浮躁,那你的勤奋就...
微信网名2022最新 微信网名2022最新  微信网名2022最新(精选500个)  许多人想在2022用新的微信网名迎接...
数学科普资料 数学科普资料1、在微分几何方面取得令人瞩目的成果,于1931年获得理学博士学位,并以“读书不忘救国,...
企业家座右铭 下面是大学网小编为大家搜集整理提供的关于企业家座右铭,欢迎阅读。联想集团创始人:柳传志柳传志的座右铭...
好听的音乐个性签名 好听的音乐个性签名  好听的音乐个性签名有哪些?绕梁三日,余音不绝,欢快洒落在心窝里,宛如一些活泼轻...
男人微信昵称 男人微信昵称  一、取名原则  符合形象定位要求  网名是你自己形象综合的,直接传达,自己不喜欢的网...
简短的心情不好的签名 简短的心情不好的签名汇总86句  你的笑容很甜,我想要游走在你的世界。下面是关于心情不好的签名86句...
白塔山公园 白塔山公园白塔山公园白塔山公园(白塔山公园)白塔山公园位于兰州市北,因山头有一座白塔寺而得名。该寺始...
梦幻个性名字400个 梦幻个性名字400个  怎么取个网名  1、欲想助运,网名不可轻易变更,首先必须要强调一点:如果取网...
女生可爱的个性签名 女生可爱的个性签名精选80条  随着社交网络开始流行,越来越多人钟情于在线上更换个性签名,用于彰显自...