C#:NLog接入配置与简单使用

安装NLog

打开Visual Studio中的包管理器,路径: 工具 -> NuGet包管理器 -> 管理解决方案的NuGet包 ,在浏览中搜索NLog,点击后进行安装。(如果已经安装,跳过该步骤)

添加NLog配置

有两种方式添加NLog配置:1、通过代码进行添加;2、通过配置文件进行添加。

下面介绍通过配置文件添加配置的方法。

  1. 右键解决方案,选择添加新项,选择应用程序配置文件,名称为”NLog.config”(名称必须为NLong.config)。

2. 右键“NLog.config”文件,选择属性,将复制到输出目录设置为“如果较新则复制”。

3. 在“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="Off" internalLogFile="c:\temp\nlog-internal.log">

	<variable name="appName" value="ConsoleAppDemo"/>

	<targets>
		<target name="logconsole" xsi:type="Console"
				layout="${longdate} [${uppercase:${level}}] ${callsite}(${callsite-filename:includeSourcePath=False}:${callsite-linenumber}) - ${message} ${exception:format=ToString}" 
		/>

		<target name="logfile" 
				xsi:type="File" 
				fileName="${basedir}/logs/${appName}-${shortdate}.log"
				layout="${longdate} [${uppercase:${level}}] ${callsite}(${callsite-filename:includeSourcePath=False}:${callsite-linenumber}) - ${message} ${exception:format=ToString}"
				maxArchiveFiles="999"
				archiveFileName="${basedir}/logs/${appName}-${shortdate}-${###}.log"
				createDirs="true"
				archiveAboveSize="102400"
				archiveEvery="Day"
				encoding="UTF-8"
		/>

	</targets>

	<rules>
		<logger name="*" minlevel="Debug" writeTo="logfile" />
	</rules>
</nlog>
    • <variable name="appName" value="ConsoleAppDemo"/> 定义了输出日志文件的名称开通,value=”ConsoleAppDemo”的内容可以自行进行修改
    • <targets>中定义了日志输出的方式以及输出格式
      • xsi:type指定输出方式,“Console”表示输出到控制台,“File”表示输出到文件
      • fileName输出的文件路径和文件名称,${basedir}表示程序运行目录,可以自行指定
      • layout指定了日志输出的格式
      • maxArchiveFiles 最大备份文件个数
      • archiveFileName 备份文件路径和名称
      • createDirs 是否自动创建目录
      • archiveAboveSize 日志滚动备份的大小
      • archiveEvery 日志滚动备份的频率
      • encoding 日志文件编码格式
    • <rules> 定义了命名空间以及日志级别的输出方式 ,一般有如下几个属性:
      • name - 日志源/记录者的名字 (允许使用通配符*)
      • minlevel - 匹配日志范围的最低级别
      • maxlevel - 匹配日志范围的最高级别
      • level - 匹配的单一日志级别
      • levels - 匹配的一系列日志级别,由逗号分隔。
      • writeTo - 规则匹配时日志应该被写入的一系列目标<target>节点的name属性,由逗号分隔。
      • 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")。
    • NLog支持如下几种记录等级(优先级:Trace→Debug→Info→Warn→Error→Fatal):
  1. Trace最常见的记录信息,一般用于普通输出
  2. Debug同样是记录信息,不过出现的频率要比Trace少一些,一般用来调试程序
  3. Info信息类型的消息
  4. Warn警告信息,一般用于比较重要的场合
  5. Error错误信息
  6. Fatal致命异常信息。一般来讲,发生致命异常之后程序将无法继续执行。
  • 文件添加了之后,NLog就配置好了
  • 注:修改NLog.config之后,需要重新生成解决方案

使用举例

下面简单介绍如何进行日志输出。

工程名称:ConsoleAppDemo

简单的日志写入

需要先实例化NLog.Logger,然后就可以进行日志输出,例如:

NLog.Logger logger = NLog.LogManager.GetCurrentClassLogger();
logger.Debug("my first log");

GetCurrentClassLogger: 获取当前的类。

在上面的配置文件中,Debug及以上等级的日志输出到${basedir}/logs/${appName}-${shortdate}.log 文件中,在该工程的bin\\Debug\\net6.0\\logs 目录下,生成了“ConsoleAppDemo-2023-02-23.log”日志文件。

文件中的内容:

2023-02-23 22:32:03.5586 [DEBUG] Program.<Main>$(Program.cs:7) - my first log

在类中使用

在每个需要写日志的类中,定义静态的private logger,用来日志输出。

private static NLog.Logger logger = NLog.LogManager.GetCurrentClassLogger();

之后就可以在类的方法中使用logger进行日志输出,常用的输出级别:

  • logger.Debug()
  • http://logger.Info()
  • logger.Warn()
  • logger.Error()

输出方式举例

namespace ConsoleAppDemo.src.module.demo
{
    internal class DemoOne
    {
        private static NLog.Logger logger = NLog.LogManager.GetCurrentClassLogger();
        public void LogDemo(string msg)
        {
            try
            {
                logger.Debug("this is debug log");
                logger.Info("this is info log");
                logger.Warn("this is waring log");
                logger.Error("this is error log");

                logger.Info("the input is {0}", msg);

                throw new Exception("LogDemo 出现异常");
            } 
            catch (Exception e) {
                logger.Error("LogDemo出错: {0}", e);
            }
            
        }
    }
}

运行后,日志文件中的日志内容如下:

2023-02-23 22:42:03.0395 [DEBUG] ConsoleAppDemo.src.module.demo.DemoOne.LogDemo(DemoOne.cs:17) - this is debug log 
2023-02-23 22:42:03.0413 [INFO] ConsoleAppDemo.src.module.demo.DemoOne.LogDemo(DemoOne.cs:18) - this is info log 
2023-02-23 22:42:03.0413 [WARN] ConsoleAppDemo.src.module.demo.DemoOne.LogDemo(DemoOne.cs:19) - this is waring log 
2023-02-23 22:42:03.0413 [ERROR] ConsoleAppDemo.src.module.demo.DemoOne.LogDemo(DemoOne.cs:20) - this is error log 
2023-02-23 22:42:03.0413 [INFO] ConsoleAppDemo.src.module.demo.DemoOne.LogDemo(DemoOne.cs:22) - the input is ooooo 
2023-02-23 22:42:03.0413 [ERROR] ConsoleAppDemo.src.module.demo.DemoOne.LogDemo(DemoOne.cs:24) - LogDemo出错: System.Exception: LogDemo 出现异常
   at ConsoleAppDemo.src.module.demo.DemoOne.LogDemo(String msg) in \\\\Mac\\Home\\Desktop\\
posted @ 2024-07-25 14:51  星畔  阅读(372)  评论(0编辑  收藏  举报