rilog 是一个用于.net应用程序的日志记录开源库,配置简单,接口干净,并可运行在最新的.net平台上,与其他日志库不同, rilog 是以功能强大的结构化事件数据为基础构建的, 支持将日志输出到控制台、文件、数据库和其它更多的方式,支持参数化日志模板,非常灵活。
之前我们项目使用的是log4j来记录用户日志的,在开发的过程中,慢慢的发现log4j好像并不能满足我们的需求,比如结构化,日志分析等,于是决定使用rilog来替换掉log4j,在使用的过程中发现rilog还是很强大的。
1.卸载log4j包
2.删除log4j文件夹
3.删除startup的代码
4.将log4j相关的代码删除
nuget安装以下几个包
编辑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" //按天记录 } } 中秋节的朋友圈说说心情] } } ]
启动项目测试
生成了日志文件
输出到了数据库
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");
启动项目,测试接口,数据库已经插入数据。
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" } },
启动项目,测试接口,可以通过页面看到数据。
在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 条评论) |