快速使用Nlog

发布时间 2023-04-11 14:36:37作者: GongDonghai

快速使用NLog

简单地介绍
NLog是.NET的日志框架,具有丰富的日志路由和管理功能,方便我们生成、管理日志。NLog支持结构化日志、多个日志目标以及现代日志框架。

Step1 创建项目

image

Step2 安装依赖

Install-Package NLog.Extensions.Logging

image
P.S : 也可以通过管理NuGet程序包进行添加

Step3 创建Logger

在Program.cs文件中添加代码

//创建logger
private static Logger logger = LogManager.GetCurrentClassLogger();

image

在大部分的情况下,每个类都共用一个Logger,就像每个类创建Logger的时候都都用了相同的名称。 LogManager提供了一个方法为当前类创建Logger,叫做 GetCurrentClassLogger()。 因为 loggers是线程安全的,你能够非常容易的创建一个Logger,然后把他存放在一个静态变量中

NLog的6个日志级别

序号 级别 说明
1 Fatal 最严重,程序终止了
2 Error 错误的,记录程序执行过程中发生的问题
3 Warn 警告
4 Info 信息,我常用于生产环境,记录一下定时任务的运行情况
5 Debug 用于调试
6 Trace 用于跟踪代码

Step4 配置NLog

添加应用程序配置文件,并命名为nlog.config
image
然后将nlog.config属性中的“复制到输出目录”改为“始终复制”
image

下面是我的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="Warn"
      internalLogFile="Logs/nlog-internal.log">
	
	<targets>
		<!-- write logs to file -->
		<!--输出目标:[xsi:type]输出类型文件, [name]名称,这里我取名为info,[fileName]输出到程序根目录logs文件夹中, 以日期作为生成log文件名称, [layout]生成内容的格式
		-->
		<!-- write logs to the files -->
		<target xsi:type="File" name="trace" fileName="${basedir}/Logs/Trace_${shortdate}.log" layout="${longdate} | ${uppercase:${level}} | ${message}" />
		<target xsi:type="File" name="debug" fileName="${basedir}/Logs/Debug_${shortdate}.log" layout="${longdate} | ${uppercase:${level}} | ${message}" />
		<target xsi:type="File" name="info" fileName="${basedir}/Logs/Info/${shortdate}.log" layout="${longdate} | ${uppercase:${level}} | ${message}" />
		

		<!-- write logs to the console-->
		<target xsi:type="Console" name="logconsole" />
	</targets>

	<rules>
		<!-- 日志路由规则:最低级别info,输出到target目标 JiShangInformationExport -->
		<!-- 由低到高 trace,debug,info,warn,error,fatal -->
		<!--  -->
		<logger name="*" level="trace" writeTo="trace" />
		<logger name="*" level="debug" writeTo="debug" />
		<logger name="*" level="info" writeTo="info" />
	</rules>
</nlog>

下面是配置文件中一些元素的说明
nlog根节点下面有如下的子元素:

  1. targets 定义日志 targets/outputs
  2. rules 定义日志路由规则
  3. extensions 从*.dll文件中加载日志扩展
  4. include 引入其他的外部配置
  5. variable 设置配置变量的值

targets

每个targets必须包含name和type特性,name是target的名称,type是target类型 (这里好像说了什么,又好像什么都没说)

rules

rules输出方式(targets)的关联。规则会从列表的第一条开始匹配。当一个规则匹配,日志信息会通过该规则关联的targer输出。如果该规则定义了final标记,那么,就不会继续匹配下面的规则。
每一条路由都是一个logger元素, 具有下面的特性,各种规则配置在logger子标签里。

  • name - 记录者的名字
  • minlevel - 最低级别
  • maxlevel - 最高级别
  • level - 单一日志级别
  • levels - 一系列日志级别,由逗号分隔
  • writeTo - 规则匹配时日志应该被写入的一系列目标,由逗号分隔

Step5 调用

image
程序运行完后查看文件,Logs文件夹
image

info日志
image

debug日志
image

trace日志
image

参考

[1]https://nlog-project.org/documentation/v5.0.0/html/R_Project_NLog.htm

[2]https://nlog-project.org/

[3]https://betterstack.com/community/guides/logging/how-to-start-logging-with-nlog/

[4]https://www.cnblogs.com/animal/articles/4064163.html