1.准备项目

.Net项目中关于日志的组件还是很多的,包括log4net,Nlog,以及.net core 框架自带的Logging,今天就简单介绍一下Nlog

首先准备一个demo项目,我这里新建的是一个基于.net6的web项目,文件目录如下。

Nlog.config文件是自己添加的,里面内容稍后再说。

接着添加Nlog的nuget包。名称版本如下,由于是.NET Web项目,所以没必要下载全部的Nlog包,下载对应的Nlog.Web.AspNetCore即可,当然下载第一个也是可以的,按需引入。

接着新建一个Nlog.config文件,如果引入了Nlog.Config这个组件的话,配置文件是会自动创建的,不过文件还是得修改一下,所以,自己添加之后修改也是一样的。文件内容如下。

<?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"xsi:schemaLocation="http://www.nlog-project.org/schemas/NLog.xsd NLog.xsd"autoReload="true"throwExceptions="false"internalLogLevel="Info" internalLogFile="/var/log/nlog-internal.log"><!--声明目标--><targets><target xsi:type="File" name="info_file" fileName="${basedir}/logs/${shortdate}.log"layout="${longdate} ${uppercase:${level}} ${message}"/><target xsi:type="File" name="error_file" fileName="${basedir}/logs/${shortdate}_error.log"layout="${longdate} ${uppercase:${level}} ${message} ${exception:stacktrace}" /><target xsi:type="Console" name="Console" layout="${longdate} ${uppercase:${level}} ${message} ${exception:stacktrace}" /></targets><!--声明规则--><rules><logger name="*" minlevel="Info" writeTo="info_file,Console" /><logger name="*" minlevel="Error" writeTo="error_file,Console" /></rules>
</nlog>

剩下的代码部分就很简单了,看下图。

using Microsoft.AspNetCore.Mvc;
using NLog;
using Nlog_demo.Models;
using System.Diagnostics;namespace Nlog_demo.Controllers
{public class HomeController : Controller{private readonly Logger logger = LogManager.GetCurrentClassLogger();public HomeController(){}public IActionResult Index(){logger.Info("启动成功");logger.Warn("警告信息");logger.Trace("一般信息");logger.Error("错误信息");logger.Fatal("严重信息");return View();}public IActionResult Privacy(){return View();}[ResponseCache(Duration = 0, Location = ResponseCacheLocation.None, NoStore = true)]public IActionResult Error(){return View(new ErrorViewModel { RequestId = Activity.Current?.Id ?? HttpContext.TraceIdentifier });}}
}

引入命名空间后使用LogManager创建一个logger对象之后,就可以添加日志了。

private readonly Logger logger = LogManager.GetCurrentClassLogger();

2.配置文件讲解

首先需要知道配置文件中的记录等级Level

  1. Trace - 最常见的记录信息,一般用于普通输出
  2. Debug - 同样是记录信息,不过出现的频率要比Trace少一些,一般用来调试程序
  3. Info - 信息类型的消息
  4. Warn - 警告信息,一般用于比较重要的场合
  5. Error - 错误信息
  6. Fatal - 致命异常信息。一般来讲,发生致命异常之后程序将无法继续执行。

接下来就对配置文件里的一些参数做一下说明。这里主要介绍nlog,target,rules,variable,这些常用的。

nlog

  • autoReload:配置文件修改后,是否重新自动加载。

targets
主要关心targets下配置的声明目标参数

  • xsi:type:记录类型【File,Console,Database,Mail,Network,Debugger 】常用的就是File,Console,Database。
  • name:目标名称,在rules里会用到。
  • fileName:输出文件名。若类型不是File,则不需要该参数
  • layout:输出内容
    <target xsi:type="File" name="error_file" fileName="${basedir}/logs/${shortdate}_error.log"layout="${longdate} ${uppercase:${level}} ${message} ${exception:stacktrace}" /><target xsi:type="Console" name="Console" layout="${longdate} ${uppercase:${level}} ${message} ${exception:stacktrace}" />

rules
主要关心logger配置

  • name - 日志源/记录者的名字 (允许使用通配符*)
  • minlevel - 该规则所匹配日志范围的最低级别
  • maxlevel - 该规则所匹配日志范围的最高级别
  • level - 该规则所匹配的单一日志级别
  • levels - 该规则所匹配的一系列日志级别,由逗号分隔。
  • writeTo - 规则匹配时日志应该被写入的一系列目标,由逗号分隔。
  • final - 标记当前规则为最后一个规则。其后的规则即时匹配也不会被运行。

如果设置了minlevel,则大于等于当前级别的都会被记录下来。

 <logger name="*" minlevel="Info" writeTo="info_file,Console" />

variable
用来声明变量,键值对的形式

  • name- 键
  • value- 值
  <variable name="logdir" value="/var/log"/>

3.Nlog自带变量汇总

${basedir}:应用程序当前目录
${shortdate}:短日期【2022-01-06】
${longdate}:长日期【2022-01-06 14:05:20.4023】
${logger}: 记录器的名字
${level}:记录等级【Trace,Debug,Info,Warn,Error,Fatal】
${uppercase}:转大写
${message}:调用Nlog时输入的内容
${callsite-linenumber}:文件行号
${hostname}:主机名
${environment} 环境变量
${exception} exception信息
${machinename} 名称
${mdc} 映射诊断
${mdlc} 异步映射诊断上下文
${ndc} 线程结构
${ndlc} 异步线程
${newline} 文字换行
${nlogdir} nlog.dll目录。
${performancecounter} 述性能计数器。
${processid} 当前进程标识符
${processinfo} 运行信息
${processname} 当前进程的名称。
${processtime} 该时间过程中格式HH:MM:ss.mmm。
${qpc} 高精度定时器,基于返回的值从queryperformancecounter(任选地)转换为秒。
${registry} 从注册表中的值。
${sequenceid} ID
${shortdate} 短时间 格式YYYY-MM-DD。
${sl-appinfo} Silverlight应用。
${specialfolder} 文件夹路径
${stacktrace} - 堆栈跟踪渲染器。
${tempdir} 临时目录中。
${threadid} 当前线程的标识符。
${threadname} 当前线程。
${ticks} 当前日期和时间。
${time} 24小时格式HH:MM:ss.mmm。
KaTeX parse error: Expected '}', got 'EOF' at end of input: {var} {var}-提供新的变量(4.1)
${windows-identity} indows线程标识信息(用户名)

.NET Nlog使用讲解相关推荐

  1. NLog基本讲解以及使用

    Nlog和Log4net 基本一样. 通俗讲都是记录日志的.今天先讲Nlog的使用.具体原理.....,先略. 第一步:下载 通过Nuget安装NLog,(找到项目里的"引用",右 ...

  2. NLog日志框架使用探究

    前言 日志是每个程序的基本模块.本文是为了探究如何通过NLog方便及记录日志并通过Log4View工具收集日志统一查看. 为什么是NLog? 下载量NLog和Log4Net差不多,这两个日志模块是.N ...

  3. 二维小波变换_小波变换完美通俗讲解系列之 (一)

    声明:该篇文章转自csdn,原始博主已经找不到了,在这里给出转载博主地址,如有侵权,请私信我删除. https://blog.csdn.net/liusandian/article/details/5 ...

  4. 小波变换完美通俗讲解系列之 (一)

    申明:小波变换 完美通俗解读,是<小波变换和motion信号处理>系列中的第一篇. 原始出处为​windstorm的网站http://www.kunli.info/,并非本站原创,但这位大 ...

  5. KSO-netcore 中使用日志组件Nlog

    简介 在所有的应用程序中,日志功能是不可或缺的模块,我们可以根据日志信息进行调试.查看产生的错误信息,在ASP.NET Core中我们可以使用log4net或者NLog日志组件来实现记录日志的功能,这 ...

  6. SourceMap源码映射详细讲解

    SourceMap源码映射详细讲解 前端工程打包后代码会跟项目源码不一致,当代码运行出错时控制台上定位出错代码的位置跟项目源码上不对应.这时候我们很难定位错误代码的位置.SourceMap的用途是可以 ...

  7. 超详细的排序算法讲解!一看就懂!

    排序算法对大家来说肯定都不陌生吧,作为最基础且最重要的算法之一,在面试中经典排序算法也经常被要求手撕代码.可是排序算法实在是太多了(见下图),有些名字听起来都莫名其妙的,比如鸡尾酒排序,侏儒排序,煎饼 ...

  8. C# QQ 机器人 Newbe.Mahua 1.X 主要特性介绍与常见问题讲解

    Newbe.Mahua 1.X 系列 LTS 版本已经发布.本篇就来介绍一下 1.X 版本中的主要特性以及常见问题的解答. 主要特性 依赖注入 框架本身采用 Autofac 作为依赖注入框架.进行插件 ...

  9. 从命令行到IDE,版本管理工具Git详解(远程仓库创建+命令行讲解+IDEA集成使用)

    首先,Git已经并不只是GitHub,而是所有基于Git的平台,只要在你的电脑上面下载了Git,你就可以通过Git去管理"基于Git的平台"上的代码,常用的平台有GitHub.Gi ...

最新文章

  1. ATM高层定义了4类业务,压缩视频信号的传送属于______。B
  2. 【综述专栏】从微分几何和代数拓扑的视角来重新探讨图神经网络
  3. C++ 退出双层for循环,解决 break、return、continue无法实现问题
  4. tcpip卷一二三区别_八年级物理期末试卷(内附初三期末卷)
  5. 云原生已来,只是分布不均
  6. (转)使用json-lib 数据格式转换
  7. 计算机接口配件,最近发布:最新的计算机外部接口计算机主板外部接口简介计算机主板接口简介...
  8. 基于node.js+MongoDB+elementui的分页功能更新优化
  9. 两台XP系统电脑用双网卡共享上网操作
  10. 如何在 Mac 上的 Pages 文稿中查找和替换文本?
  11. 如何找到chromedriver与chrome的对应版本
  12. StringUtil和StringUtils的区别
  13. linux怎么卸载vsftpd软件,vsftpd配置详解之软件安装和卸载
  14. 玩转小黑框!Terminal 入门到进阶,最后放弃!
  15. HJ82 将真分数分解为埃及分数(需要知道求埃及数的数学方法)
  16. 厦大 1395 组合
  17. 微软亚太研发集团2013招聘
  18. 软件外包如何正确定价
  19. word2007中如何删除脚注尾注
  20. 开发实训10---Android---注册登录功能实现1

热门文章

  1. MyBatis 框架基础
  2. js return加分号_javascript每条语句该不该加分号(javascript分号详解)
  3. 深入源码聊聊RocketMQ刷盘机制
  4. [软件工具][教程]一个很好用的可以将csdn博客文章导出word的工具使用教程
  5. 我的世界侠服务器怎么注册密码是什么意思,我的世界开服侠怎么用 我的世界开服侠服主怎么作弊...
  6. Pytorch使用GPU训练模型加速
  7. 数据分析实战 205 :项目分析思路 —— 某在线教育机构经营分析
  8. 计算机密码学思路,密码学中加密算法的研究和实现
  9. MATLAB中plot与line,Matlab Plot 和 Line区别
  10. unity 换材质和贴图 性能消耗