C#:NLog接入配置与简单使用
安装NLog
打开Visual Studio中的包管理器,路径: 工具 -> NuGet包管理器 -> 管理解决方案的NuGet包
,在浏览中搜索NLog,点击后进行安装。(如果已经安装,跳过该步骤)
添加NLog配置
有两种方式添加NLog配置:1、通过代码进行添加;2、通过配置文件进行添加。
下面介绍通过配置文件添加配置的方法。
- 右键解决方案,选择添加新项,选择
应用程序配置文件
,名称为”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):
- Trace最常见的记录信息,一般用于普通输出
- Debug同样是记录信息,不过出现的频率要比Trace少一些,一般用来调试程序
- Info信息类型的消息
- Warn警告信息,一般用于比较重要的场合
- Error错误信息
- 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\\
一份耕耘,一份收获,付出就有回报永不遭遇过失败,因我所碰到的都是暂时的挫折