.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

  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线程标识信息(用户名)

  • 1
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
.NET Core 控制台应用中使用 NLog,需要进行以下步骤: 1. 安装 NLog 包。您可以在 NuGet 包管理器中搜索 NLog 并安装它,或使用命令行: ``` dotnet add package NLog ``` 2. 在项目根目录下创建一个名为 `nlog.config` 的文件,并将以下配置复制到文件中,以启用NLog: ```xml <?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="Trace" internalLogFile="c:\temp\nlog-internal.log"> <targets> <target name="file" xsi:type="File" fileName="${basedir}/logs/${shortdate}.log" layout="${longdate} ${uppercase:${level}} ${message}" /> </targets> <rules> <logger name="*" minlevel="Trace" writeTo="file" /> </rules> </nlog> ``` 这样,NLog 就会将日志写入到当前应用程序目录下的 `logs` 文件夹中,并将日志文件名设置为当前日期。 3. 在应用程序入口点中,添加 NLog 配置和日志记录: ```csharp using NLog; using NLog.Config; using NLog.Targets; class Program { static void Main(string[] args) { // 加载NLog配置 LogManager.LoadConfiguration("nlog.config"); // 创建logger var logger = LogManager.GetCurrentClassLogger(); // 记录日志 logger.Info("Hello, NLog!"); // 等待用户按下任意键退出 Console.ReadKey(); } } ``` 这样就可以在控制台应用程序中使用 NLog 记录日志了。如果您需要更多的日志记录选项,可以参考 NLog 的官方文档。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

李公子lm

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值