应无所住,而生其心
排名
1
文章
860
粉丝
112
评论
163
net core webapi post传递参数
庸人 : 确实坑哈,我也是下班好了好几次,发现后台传递对象是可以的,但...
百度编辑器自定义模板
庸人 : 我建议换个编辑器,因为现在百度富文本已经停止维护了,用tinymec...
ICP备案 :渝ICP备18016597号-1
网站信息:2018-2025TNBLOG.NET
技术交流:群号656732739
联系我们:contact@tnblog.net
公网安备:50010702506256
欢迎加群交流技术

.net core3.x使用nlog

4508人阅读 2021/1/6 17:20 总访问:5185713 评论:0 收藏:0 手机
分类: .NET Core


下载依赖:

  1. <ItemGroup>
  2.   <PackageReference Include="Nlog" Version="4.7.13" />
  3.   <PackageReference Include="NLog.Web.AspNetCore" Version="4.14.0" />
  4. </ItemGroup>

或者使用命令下载:

  1. Install-Package NLog
  2. Install-Package NLog.Web.AspNetCore



添加一个nlog配置文件


配置文件选择:web配置文件即可


如下:

  1. <?xml version="1.0" encoding="utf-8" ?>
  2. <nlog xmlns="http://www.nlog-project.org/schemas/NLog.xsd"
  3.       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" >
  4.   <targets>
  5.     <!--这个目标:最终输出文件类型, 位于根目录中得logs文件夹中, 名称以每日得时间一次生成log文件 , layout: 这个选项为生成的格式-->
  6.     <target xsi:type="File" name="file" 
  7.             fileName="${basedir}/logs/nlog-aj-${shortdate}.log"
  8.             layout="${longdate} ${uppercase:${level}} ${message}" />
  9.   </targets>
  10.   <rules>
  11.     <!--设定了一个Debug得路由, 最终指向了一个f名称得目标 -->
  12.     <logger name="*" minlevel="Debug" writeTo="file" />
  13.   </rules>
  14. </nlog>

主要是两个内容,一个是规则配置,比如设定日志等级,然后有个writeTo和上面的目标进行关联,目标可以设置文件名的规则,输出内容的规则等。
比如输出具体某几个日志等级

  1. <logger name="*" level="Debug,Warn,Trace,Error,Fatal" writeTo="seq" />


name - 日志源/记录者的名字 (允许使用通配符*)

minlevel - 该规则所匹配日志范围的最低级别

maxlevel - 该规则所匹配日志范围的最高级别

level - 该规则所匹配的单一日志级别

levels - 该规则所匹配的一系列日志级别,由逗号分隔。

writeTo - 规则匹配时日志应该被写入的一系列目标,由逗号分隔。

final - 标记当前规则为最后一个规则。其后的规则即时匹配也不会被运行。

小例子:

<logger name="Name.Space.Class1" minlevel="Debug" writeTo="f1" /> - 名字空间Name.Space下的Class1这个类的所有级别等于或者高于Debug的日志信息都写入到“f1”这个目标里。

<logger name="Name.Space.Class1" levels="Debug,Error" writeTo="f1" /> -名字空间Name.Space下的Class1这个类的所有级别等于Debug或Error的日志信息都写入到“f1”这个目标里。

<logger name="Name.Space.*" writeTo="f3,f4" /> -名字空间Name.Space下所有类的所有级别的日志信息都写入到“f3”和“f4”这两个目标里。

<logger name="Name.Space.*" minlevel="Debug" maxlevel="Error" final="true" /> - 名字空间Name.Space下所有类的、级别在Debug和Error之间的(包括Debug,Info,Warn,Error) 日志信息都不会被记录(因为这条规则没有定义writeTo),同时其它后续规则也都会被忽略(因为这里设置了final="true")。



使用日志,日志等级

如下:

  1. public IActionResult Index(string value)
  2. {
  3.     var nlog = NLog.LogManager.GetCurrentClassLogger();
  4.     nlog.Info("一般信息");
  5.     nlog.Error("错误信息");
  6.     nlog.Warn("警告信息");
  7.     nlog.Trace("Trace信息");
  8.     nlog.Debug("调试信息");
  9.     return View();
  10. }

日志输出位置默认在\Debug\netcoreapp3.1\logs下面。



根据上图我们可以看到日志输出内容,但是为什么没有看到Trace信息呢。是因为日志等级的原因,上面的日志等级设置是minlevel="Debug",最低日志等级是Debug所以输出不了Trace信息。我们可以在配置一个规则,把日志等级修改成Trace即可。

修改配置文件为:

  1. <?xml version="1.0" encoding="utf-8" ?>
  2. <nlog xmlns="http://www.nlog-project.org/schemas/NLog.xsd"
  3.       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" >
  4. <targets>
  5. <target xsi:type="File" name="fffff"
  6. fileName="${basedir}/logs/nlog-aj-${shortdate}.log"
  7. layout="${longdate} ${uppercase:${level}} ${message}" />
  8. <target xsi:type="File" name="xxx"
  9. fileName="${basedir}/logs/${shortdate}.log"
  10. layout="${longdate} ${uppercase:${level}} ${message}" />
  11. </targets>
  12. <rules>
  13. <logger name="*" minlevel="Debug" writeTo="fffff" />
  14. <logger name="*" minlevel="Trace" writeTo="xxx" />
  15. </rules>
  16. </nlog>

我们增加了一个规则和输出目标,其中一个日志最小等级是Bebug,另外一个是Trace。上面两个目标的文件名也不一样。
生成的日志文件如下:


日志最小等级是Trace的内容:可以看到所有日志信息都已经输出了


日志最小等级是Trace的内容:


其他的什么日志等级可以按自己的需要配置,可以配置最低日志等级,最高日志等级,具体的某个或者某几个日志等级,比较灵活!



添加NLOG依赖,让项目默认的日志使用NLOG作为日志输出
如下:

如果不要这步.net core自带的日志输出就不会在nlog里边


使用.net core自带的日志输出:

因为我们配置了项目日志使用nlog所以这个日志的输出也是在nlog里边

  1. private readonly ILogger<HomeController> _logger;
  2. public HomeController(ILogger<HomeController> logger)
  3. {
  4.     _logger = logger;
  5. }
  6. public IActionResult Index()
  7. {
  8.     _logger.LogInformation("自带log测试_普通信息日志");
  9.     _logger.LogDebug("自带log测试_调试日志");
  10.     _logger.LogError("自带log测试_错误日志");
  11.     _logger.LogWarning("自带log测试_警告日志");
  12.     _logger.LogTrace("自带log测试_跟踪日志");
  13.     return View();
  14. }

然后我们看看日志输出:自带的输出日志也有了


但是我们日志写了5个,这里只输出了3个,缺少了trace和debug。自带的控制台日志里边也没有trace和debug

和nlog的日志等级设置一样,这也是因为日志等级的问题,.net core自带的日志等级设置是在appsettings.json配置文件
关于日志等级的设置:

  1. {
  2.   "Logging": {
  3.     "LogLevel": {
  4.       "Default""Trace",
  5.       "Microsoft""Warning",
  6.       "Microsoft.Hosting.Lifetime""Information"
  7.     }
  8.   },
  9.   "AllowedHosts""*"
  10. }

一般设置默认情况下的”Default”: “Trace”即可,默认”Default”设置是Information所以会缺少。

注意:还请确保检查任何特定于环境的应用程序设置,比如appsettings.development.json,开发环境下应该是设置appsettings.development.json而不是appsettings.json
我们把appsettings.development.json的Default日志等级设置一下:设置成最低等级Trace

然后在看日志输出:会发现所有的都能看到了



.net core项目的默认日志使用nlog作为日志框架后,日志等级会先受到自带日志等级的配置影响,然后也会收到nlog日志等级配置的影响


欢迎加群讨论技术,1群:677373950(满了,可以加,但通过不了),2群:656732739。有需要软件开发,或者学习软件技术的朋友可以和我联系~(Q:815170684)

评价

net core 使用 EF Code First

下面这些内容很老了看这篇:https://www.tnblog.net/aojiancc2/article/details/5365 项目使用多层,把数据库访问...

使用OLEDB读取不同版本Excel的连接字符串设置

使用OleBD读取excel的时候,excel不同的版本,连接字符串的写法也会不一样。///&lt;summary&gt; ///读取excel ///&lt;/su...

C 使用CancellationTokenSource取消多线程

有时间我们在使用多线程的时候,需要取消线程的执行,可以使用CancellationTokenSource来取消对Task开辟多线程的取消如下:...

使用爬虫刷csdn博客访问量

首先了解一下常见反爬虫的检测方法频率监测:有些网站会设置一种频率监测的机制,对于同一IP,若在一定时间内访问的速度超...

Idea下使用maven搭建SSM(一):SpringMVC

Spring MVC是一款基于MVC架构模式的轻量级Web框架,其目的是将Web开发模块化,对整体架构进行解耦,简化Web开发流程。下面...

Idea下使用maven搭建SSM(二):MyBatis

开发Web应用,数据的存储和处理往往离不开数据库和SQL语句。在使用Java开发的Web应用中,自然也少不了连接数据库的步骤。在...

使用 微软自带语音合成类库

//引入语音合成名称空间 usingSystem.Speech.Synthesis; classA { voidtest1() { //实例化并指定字符串播放合成读音 ...

如何使用图标像使用文字一样,使用文本图标的方法

1.首先在Iconfont-阿里巴巴矢量图标库上面找到你需要的图标然后加入你的购物车然后选择图标;注意:每个类型的图标会大小不...

使用七牛云的cdn服务,提高图片的加载速度

CDN介绍CDN的全称是Content Delivery Network,即内容分发网络。CDN加速主要是加速静态资源,如网站上面上传的图片、媒体,...

.net core 使用session

tip:net core 2.2后可以直接启用session了,不用在自己添加一次session依赖,本身就添加了使用nuget添加引用Microsoft.AspN...

使用OutLook发送邮件

publicstaticvoidOutlook(stringSubject,stringTextBody,stringFromAdd,stringFromPass,stringTo,stringCC,List&lt;string&...

SQL Server 中使用游标

--声明一个游标 DECLAREMyCursorCURSOR FORSELECTTOP5FBookName,FBookCodingFROMTBookInfo//定义一个叫MyCursor的游标,...

Windows使用wireshark抓包小心得

wireshrak是个网络抓包工具,常用。但是在数据较大的网络环境中直接使用软件抓包会导致wireshark卡死。为什么呢 ?网卡瞬间...

Oracle自定义函数的简单使用

一.最最最简单的返回一个数字的函数createorreplacefunctionfun_show returnint--申明返回值 as begin return1; end;...

Oracle事务的简单使用

事务:  事务是一个整体,这些操作要么全部执行成功,要么全部不执行。使用事务的原因:保证数据的安全有效。事务的四个特...

Oracle使用游标

其实游标就是把查询的结果放入游标中,然后在去游标里边读取。相当于使用游标做了一个中转,而游标是可以作为参数进行传递...