.Net Core项目如何添加日志功能详解
一、微软内置的日志组件
在.net core中使用模板新建的web api项目时,会自动加入日志功能。只需要在控制器中注入ilogger就可以了。命名空间为:microsoft.extensions.logging
。
会发现只有error被打印到了控制台,trace没有被打印。那是因为在appsetting.json中配置了logging>console>default的等级为debug,日志的等级大于等于debug才会输出到控制台。在这里说一下loglevel:trace<debug<information<warning<error<critical<none
。
当打开appsettings.development.json文件你会发现跟appsettings.json配置不同。如下:
{ "logging": { "includescopes": false, "loglevel": { "default": "debug", "system": "information", "microsoft": "information" } } }
例如:
"system": "information"
表示命名空间以system开头的类中且日志等级大于等于information才会输出到控制台。
"default": "debug"
表示除以system和microsoft开头的命名空间日志等级大约等于debug才会输出到控制台。
这里说明一下到底是在什么时候,读取了appsettings.json中的配置了了? 其实是在program中 webhost.createdefaultbuilder(arge)
。
打开源码发现
当然我们可以不用微软提供的默认配置
public class program { public static void main(string[] args) { //指定配置文件路径 var configbuilder = new configurationbuilder() .setbasepath(directory.getcurrentdirectory()) .addjsonfile($"appsettings.json", true, true) .addjsonfile($"appsettings.{environmentname.development}.json", true, true); var config = configbuilder.build(); var host = new webhostbuilder() .usekestrel() .usestartup<startup>() .usecontentroot(directory.getcurrentdirectory()) .useurls(config["appsettings:url"])//设置启动时的地址 .build(); host.run(); } }
配置文件为:
{ "appsettings": { "url": "http://0.0.0.0:6000" }, "logging": { "includescopes": false, "debug": { "loglevel": { "default": "info" } }, "console": { "loglevel": { "default": "warning" } } } }
startup为:
public class startup { public iconfiguration configuration { get; private set; } public startup(ihostingenvironment env)//在构造函数中注入 ihostingenvironment { configuration = new configurationbuilder() .setbasepath(env.contentrootpath) .addjsonfile($"appsettings.json") .build(); } public void configureservices(iservicecollection services) { services.addmvc(); } public void configure(iapplicationbuilder app, ihostingenvironment env, iloggerfactory loggerfactory) { if (env.isdevelopment()) { app.usedeveloperexceptionpage(); } //添加控制台输出 loggerfactory.addconsole(configuration.getsection("logging")); loggerfactory.adddebug(); app.usemvc(); } }
但是微软提供的内置的日志组件没有实现将日志记录到文件、数据库上。下面介绍nlog
二、nlog
首先使用nuget添加nlog,然后在startup的configure中添加以下代码
public void configure(iapplicationbuilder app, ihostingenvironment env, iloggerfactory loggerfactory) { if (env.isdevelopment()) { app.usedeveloperexceptionpage(); } //添加控制台输出 loggerfactory.addconsole(configuration.getsection("logging")); loggerfactory.adddebug(); loggerfactory.addnlog();//添加nlog nlog.logmanager.loadconfiguration($@"{env.contentrootpath}/nlog.config");//指定nlog的配置文件 app.usemvc(); }
配置nlog的配置文件
<?xml version="1.0" encoding="utf-8" ?> <nlog xmlns="http://www.nlog-project.org/schemas/nlog.xsd" xmlns:xsi="http://www.w3.org/2001/xmlschema-instance" autoreload="true"> <!--internalloglevel="warn" internallogfile="internal-nlog.txt">--> <targets> <target name="allfile" xsi:type="file" filename="./logs/${shortdate}/all.log" layout="${longdate}|${message} ${exception}" /> <target name="debugfile" xsi:type="file" filename="./logs/${shortdate}/debug.log" layout="${longdate}|${message} ${exception}" /> <target name="infofile" xsi:type="file" filename="./logs/${shortdate}/info.log" layout="${longdate}|${message} ${exception}" /> <target name="warnfile" xsi:type="file" filename="./logs/${shortdate}/warn.log" layout="${longdate}|${message} ${exception}" /> <target name="errorfile" xsi:type="file" filename="./logs/${shortdate}/error.log" layout="${longdate}|${message} ${exception}" /> <target name="fatalfile" xsi:type="file" filename="./logs/${shortdate}/fatal.log" layout="${longdate}|${message} ${exception}" /> <target name="network" xsi:type="network" address="udp://chinacloudapp.cn:4561" layout="development|${longdate}|${event-properties:item=eventid.id}|${logger}|${uppercase:${level}}|${message} ${exception}" />//将日志通过网络输出 <target name="debuge" xsi:type="console"/>//将日志输出到控制台 </targets> <rules> <logger name="*" minlevel="trace" writeto="allfile,debuge" /> <logger name="*" level="info" writeto="infofile" /> <logger name="*" level="debug" writeto="debugfile" /> <logger name="*" level="warn" writeto="warnfile" /> <logger name="*" level="error" writeto="errorfile" /> <logger name="*" level="fatal" writeto="fatalfile" /> </rules> </nlog>
xsi:type=“file”
存储日志为文件格式 ,
xsi:type="console"
表示为控制台输出。
filename="./logs/${shortdate}/all.log"
表示存储文件路径。
layout="${longdate}|${message} ${exception}"
表示为文件内容的布局。
rules标签下面表示,对应等级的日志写到对应target中。如
<logger name="*" level="info" writeto="infofile" />
表示等级为info的日志写到target名称为infofile的文件中。
<logger name="*" minlevel="trace" writeto="allfile,debuge" />
表示日志等级大于trace的日志写到target名称为allfile和debuge(控制台输出)中。
同样在使用的时候,只需要在用到的地方注入ilogger,就可以使用了。
总结
以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,如果有疑问大家可以留言交流,谢谢大家对的支持。
上一篇: nodejs服务搭建教程 nodejs访问本地站点文件
下一篇: 腹泻怎么办 4个方法帮你止泻
推荐阅读
-
详解ASP.NET Core应用中如何记录和查看日志
-
ASP.NET Core扩展库之日志功能的使用详解
-
ASP.NET Core如何添加统一模型验证处理机制详解
-
如何为asp.net core添加protobuf支持详解
-
如何使用vs将asp.net core项目添加容器支持并发布docker镜像到私有dockerhub和添加k8s/helm管理
-
如何在ASP.NET Core中给上传图片功能添加水印实例代码
-
如何在ASP.NET Core类库项目中读取配置文件详解
-
如何在ASP.NET Core类库项目中读取配置文件详解
-
.Net Core项目如何添加日志功能详解
-
详解Angular5/Angular6项目如何添加热更新(HMR)功能