首页 > 作文

.Net Core3.0 WebApi 项目框架搭建之使用Serilog替换掉Log4j

更新时间:2023-04-04 22:57:31 阅读: 评论:0

为什么使用rilog

rilog 是一个用于.net应用程序的日志记录开源库,配置简单,接口干净,并可运行在最新的.net平台上,与其他日志库不同, rilog 是以功能强大的结构化事件数据为基础构建的, 支持将日志输出到控制台、文件、数据库和其它更多的方式,支持参数化日志模板,非常灵活。

之前我们项目使用的是log4j来记录用户日志的,在开发的过程中,慢慢的发现log4j好像并不能满足我们的需求,比如结构化,日志分析等,于是决定使用rilog来替换掉log4j,在使用的过程中发现rilog还是很强大的。

删除原有的log4j

1.卸载log4j包

2.删除log4j文件夹

3.删除startup的代码

4.将log4j相关的代码删除

安装rilog包

nuget安装以下几个包

配置rilog

编辑apptting.json

"rilog": {    "minimumlevel": {      "default": "debug", //最小日志记录级别      "override": { //系统日志最小记录级别        "default": "warning",        "system": "warning",        "microsoft": "warning"      }    },    "writeto": [      { "name": "console" }//输出到控制台    ]  },

program.cs将系统的logger替换为rilog

 public static ihostbuilder createhostbuilder(string[] args) =>            host.createdefaultbuilder(args)              .urviceproviderfactory(new autofacrviceproviderfactory()) //<--note this        .configurewebhostdefaults(webbuilder =>        {            webbuilder.ustartup<startup>()                      .urilog((context, logger) =>//注册rilog                      {                          logger.readfrom.configuration(context.configuration);                         日语考试报名 logger.enrich.fromlogcontext();                      });        });

test控制器注入logger,并修改logtest方法。

private readonly ilogger<testcontroller> _logger;        public testcontroller(ilogger<testcontroller> logger)        {           _logger = logger;        }
 /// <summary>        /// 测试日志        /// </summary>        /// <returns></returns>        [httpget]        public iactionresult logtest()        {            //_logger.error(typeof(testcontroller), "这是错误日志", new exception("123"));            //_logger.debug(typeof(testcontroller), "这是bug日志");            //throw new system.io.ioexception();            _logger.loginformation("info 日志");            _logger.logdebug("debug 日志");            _logger.logerror(new system.io.ioexception(), "io 错误");            return ok();        }

可以看到日志输出到了控制台

配置rilog输出到文件

apptting.json增加配置

 "writeto": [      { "name": "console" }, //输出到控制台      {        "name": "async", //rilog.sinks.async        "args": {          "configure": [            {              "name": "file", //输出文件              "args": {                "path": "log/log.txt",                "outputtemplate": "{newline}date:{timestamp:yyyy-mm-dd hh:mm:ss.fff}{newline}loglevel:{level}{newline}message:{message}{newline}{exception}",                "rollinginterval": "3" //按天记录              }            }          中秋节的朋友圈说说心情]        }      }      ]

启动项目测试

生成了日志文件

输出到了数据库

配置rilog输出到数据库

apptting.json配置

{"name": "async", //rilog.sinks.async        "args": {          "configure": [            {              "name": "file", //输出文件              "args": {                "path": "log/log.txt",                "outputtemplate": "{newline}date:{timestamp:yyyy-mm-dd hh:mm:ss.fff}{newline}loglevel:{leve20个经典寓言故事l}{newline}message:{message}{newline}{exception}",                "rollinginterval": "3" //按天记录              }            },              "name": "mssqlrver", //输出到sqlrver                "connectionstring": "rver=.;ur id=sa;password=sa123;databa=apilog;multipleactiveresultts=true",                "schema学校学费name": "dbo", //数据库所有者,默认dbo                "tablename": "logs", // 记录日志的表名                 "autocreatesqltable": true, // 是否自动创建表                "restrictedtominimumlevel": "information", // 记录日志的最小level                 "batchpostinglimit": 100, //单次批量处理中提交的最大日志数量                "period": "0.00:00:30", //进行批量提交的间隔                "columnoptionsction": {                  "disabletriggers": true,                  "clusteredcolumnstoreindex": fal,                  "primarykeycolumnname": "id",                  "addstandardcolumns": [ "logevent" ],                  "removestandardcolumns": [ "messagetemplate" ],                  "additionalcolumns": [ //自定义列                    {                      "columnname": "ip",                      "datatype": "varchar",                      "datalength": 20                    },                      "columnname": "urname",                      "datalength": 30                      "columnname": "urid",                      "datalength": 50                      "columnname": "logtype",                      "datatype": "tinyint"                      "columnname": "parameter"                      "columnname": "result"                    }                  ],                  "id": { "nonclusteredindex": true },                  "properties": {                    "columnname": "properties",                    "excludeadditionalproperties": true,                    "dictionaryelementname": "dict",                    "itemelementname": "item",                    "omitdictionarycontainerelement": fal,                    "omitquencecontainerelement": fal,                    "omitstructurecontainerelement": fal,                    "omitelementifempty": true,                    "propertyelementname": "prop",                    "rootelementname": "root",                    "quenceelementname": "q",                    "structureelementname": "struct",                    "upropertykeyalementname": fal                  },                  "timestamp": {                    "columnname": "timestamp",                    "converttoutc": true                  "logevent": {                    "excludestandardcolumns": true                  "message": { "columnname": "message" },                  "exception": { "columnname": "exception" }                }            }          ]        }      }

test控制器修改aoptest方法,添加以下语句

_logger.loginformation("ip:{ip},urname{urname},urid:{urid}","127.0.0.1","admin","1");

启动项目,测试接口,数据库已经插入数据。

配置rilog输出到q

q组件,通过网页ui的形式将日志展现出来,内容更加多样化,并赋予了更多功能日志搜索。

首先,安装q组件,q下载地址:https://getq.net/download

本地开发情形下是免费使用的,如果需要在生产环境中使用,需要商业许可(你懂的,money).在目前的版本中,4.2是只能够在windows下跑,也就是说我们如果是在windows下开发,在测试时可以借助这个方便的查看日志信息,按照给定的安装步骤完成安装。

安装完成之后,浏览器输出localhost:5341,会看到以下页面

apptting.json配置输出到q

 {              "name": "q", //输出到q              "args": {                "rverurl": "http://192.168.0.89:5341"              }            },

启动项目,测试接口,可以通过页面看到数据。

全局使用rilog记录日志

在customexceptionmiddleware.cs直接这样

public class customexceptionmiddleware    {        private readonly requestdelegate _next;        private readonly ilogger<customexceptionmiddleware> _logger;        public customexceptionmiddleware(requestdelegate next, ilogger<customexceptionmiddleware> logger)        {            _next = next;        }        public async task invoke(httpcontext httpcontext)        {            try            {                await _next(httpcontext);            }            catch (exception ex)            {                _logger.logerror(ex.message, ex); // 日志记录                await handleexceptionasync(httpcontext, ex.message);            }

globalexceptionsfilter中也一样

 public class globalexceptionsfilter : iexceptionfilter    {        private readonly ihostenvironment _env;        private readonly ilogger<globalexceptionsfilter> _logger提高;        public globalexceptionsfilter(ihostenvironment env, ilogger<globalexceptionsfilter> logger)        {            _env = env;            _logger = logger;        }        public void onexception(exceptioncontext context)        {            var json = new jsonerrorrespon();            json.message = context.exception.message;//错误信息            if (_env.isdevelopment())            {                json.developmentmessage = context.exception.stacktrace;//堆栈信息            }            context.result = new internalrvererrorobjectresult(json);            _logger.logerror(context.exception, context.exception.message);        }

如果想在服务层或仓储层用的话,安装这个包

然后直接代码里用就行了

到此这篇关于.net core3.0 webapi 项目框架搭建之使用rilog替换掉log4j的文章就介绍到这了,更多相关.net core3.0使用rilog替换掉log4j内容请搜索www.887551.com以前的文章或继续浏览下面的相关文章希望大家以后多多支持www.887551.com!

本文发布于:2023-04-04 22:57:11,感谢您对本站的认可!

本文链接:https://www.wtabcd.cn/fanwen/zuowen/73d2e3c6ae2be1aa229dcc059a530459.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

本文word下载地址:.Net Core3.0 WebApi 项目框架搭建之使用Serilog替换掉Log4j.doc

本文 PDF 下载地址:.Net Core3.0 WebApi 项目框架搭建之使用Serilog替换掉Log4j.pdf

标签:日志   控制台   数据库   文件
相关文章
留言与评论(共有 0 条评论)
   
验证码:
Copyright ©2019-2022 Comsenz Inc.Powered by © 专利检索| 网站地图