.NET Nlog使用讲解
Posted 李公子lm
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了.NET Nlog使用讲解相关的知识,希望对你有一定的参考价值。
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
- Trace - 最常见的记录信息,一般用于普通输出
- Debug - 同样是记录信息,不过出现的频率要比Trace少一些,一般用来调试程序
- Info - 信息类型的消息
- Warn - 警告信息,一般用于比较重要的场合
- Error - 错误信息
- 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使用讲解的主要内容,如果未能解决你的问题,请参考以下文章