Nlog 的使用

本来是准备用Log4Net,之前都用它。后面发现了Nlog发现更有活力,就想试试,结果一用感觉非常好。

通过包管理器直接安装:

 

你只要将配置文件 NLog.config 放在和exe同一个文件夹,那么NLog会自动加载,非常省心!

配置语法也更容易理解。

我的配置:

<nlog xmlns="http://www.nlog-project.org/schemas/NLog.xsd" 
	  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
    <targets>
		<!--控制台输出-->
		<target name="console" xsi:type="ColoredConsole" layout="${date:format=HH\:MM\:ss} ${logger} ${message}"/>
		<!--调试输出,带行号-->
		<target name="debug_file"
				xsi:type="File"
                fileName="${basedir}/Logs/${shortdate}/Debug/log.txt"
				maxArchiveFiles="30"
			layout="【${longdate}】${level:uppercase=false} ${callsite:className=True:fileName=True:includeSourcePath=False:methodName=False}:${message}" />
		<!--错误输出,带行号-->
		<target name="error_file"
				xsi:type="File"
                fileName="${basedir}/Logs/${shortdate}/log.txt"
				maxArchiveFiles="30"
                layout="【${longdate}】${level:uppercase=false} ${callsite:className=True:fileName=True:includeSourcePath=False:methodName=False}:${message}" />
    </targets>
	
    <rules>
		<logger name="*" minlevel="Trace" writeTo="console" />
		<logger name="*" minlevel="Debug" writeTo="debug_file" />
		<logger name="*" minlevel="Error" writeTo="error_file" />
    </rules>
</nlog>

target是输出的目标,可以是控制台,文件,数据库,邮件,等等。

rules 指点哪个级别的日志输出到哪个target。

然后再类中就可以直接使用:

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

创建一个logger ,然后直接logger.Info($"程序退出~~!");  就可以打印信息了。

关于,logger的封装问题,目前是感觉没必要封装,封装之后,打印的类名和行数,就是封装后的类的类名和此类的行数。不能反映真实的情况。

格式化的输出主要是靠target中的layout属性,下面是layout属性可以用的属性列表


${appdomain}

当前应用程序域l

${assembly-version}

应用程序

${basedir}

应用程序域的基本目录。

${callsite}

(类名称、方法名称和相关信息的源信息)。

${counter}

数值

${date}

当前日期和时间。

${environment}

环境变量

${exception}

exception信息

${guid}

GUID

${identity}

线程标识信息

${level}

级别。

${log4jxmlevent}

XML事件描述

${logger}

记录器的名字

${longdate}

日期和时间的格式分类yyyy-MM-dd HH:mm:ss.ffff。

${machinename}

名称

${message}

消息

${newline}

文字换行

${processid}

当前进程标识符

${processinfo}

运行信息

${processname}

当前进程的名称。

${processtime}

该时间过程中格式HH:MM:ss.mmm。

${shortdate}

短时间 格式YYYY-MM-DD。

${threadid}

当前线程的标识符。

${threadname}

当前线程。

${ticks}

当前日期和时间。

${time}

24小时格式HH:MM:ss.mmm。


解释一下:${callsite} 的具体用法

${callsite:className=True:fileName=True:includeSourcePath=True:methodName=True} 

那么就会这么显示:

CSharpTest.MainWindow.Button_Click(E:\mypro\CSharpTest\CSharpTest\MainWindow.xaml.cs:40)

格式化输出就是这个样子的:

 

posted @ 2022-04-13 17:03  宋桓公  阅读(67)  评论(0编辑  收藏  举报