C#中使用Nlog日志工具
安装
通过Nuget安装,搜索Nlog, 然后安装NLog和(相当于一个配置模板)。
当然也可以自己在项目根目录下创建一个配置文件,注意在的属性中设置 Copy to Output Directory: Copy always
基本目录结构
<?xml version="1.0" ?>
<nlog>
<targets>
<target></target>
<target></target>
</targets>
<rules>
<logger></logger>
<logger></logger>
</rules>
</nlog>
targets下面配置日志相关参数,比如日志存放的地址,名称,格式,大小等
rules下面配置目标输出规则 ,就是targets下面配置的在rules中使用。
使用模板
<?xml version="1.0" encoding="utf-8" ?>
<nlog xmlns="/schemas/"
xmlns:xsi="http:///2001/XMLSchema-instance"
xsi:schemaLocation="/schemas/ "
autoReload="true"
throwExceptions="false"
internalLogLevel="Off" internalLogFile="c:\temp\">
<!-- optional, add some variables
/nlog/NLog/wiki/Configuration-file#variables
-->
<variable name="myvar" value="myvalue"/>
<!--
See /nlog/nlog/wiki/Configuration-file
for information on customizing logging rules and outputs.
-->
<targets>
<!--
add your targets here
See /nlog/NLog/wiki/Targets for possible targets.
See /nlog/NLog/wiki/Layout-Renderers for the possible layout renderers.
-->
<!--
Write events to a file with the date in the filename.
<target xsi:type="File" name="f" fileName="${basedir}/logs/${shortdate}.log"
layout="${longdate} ${uppercase:${level}} ${message}" />
-->
<target name="info" xsi:type="File" fileName="${basedir}/logs/info/log_${shortdate}.log" archiveAboveSize="500000" encoding="utf-8" layout="${longdate} ${callsite} [${level}]: ${message}"/>
<target name="debug" xsi:type="File" fileName="${basedir}/logs/debug/log_${shortdate}.log" archiveAboveSize="500000" encoding="utf-8" layout="${longdate} ${callsite} [${level}]: ${message}"/>
<target name="error" xsi:type="File" fileName="${basedir}/logs/error/log_${shortdate}.log" archiveAboveSize="500000" encoding="utf-8" layout="${longdate} ${callsite} [${level}]: ${message}"/>
<target name="trace" xsi:type="File" fileName="${basedir}/logs/trace/log_${shortdate}.log" archiveAboveSize="500000" encoding="utf-8" layout="${longdate} ${callsite} [${level}]: ${message}"/>
<target name="warn" xsi:type="File" fileName="${basedir}/logs/warn/log_${shortdate}.log" archiveAboveSize="500000" encoding="utf-8" layout="${longdate} ${callsite} [${level}]: ${message}"/>
<target name="console" xsi:type="ColoredConsole" encoding="utf-8" layout="${longdate} ${callsite} [${level}]: ${message}"/>
</targets>
<rules>
<!-- add your logging rules here -->
<logger name="*" level="Debug" writeTo="debug" />
<logger name="*" level="Info" writeTo="info"/>
<logger name="*" level="Warn" writeTo="warn"/>
<logger name="*" level="Trace" writeTo="trace"/>
<logger name="*" level="Error" writeTo="error"/>
<!--添加必要的规则-->
<logger name="*" minlevel="Trace" writeTo="console"/>
<!--
Write all events with minimal level of Debug (So Debug, Info, Warn, Error and Fatal, but not Trace) to "f"
<logger name="*" minlevel="Debug" writeTo="f" />
-->
</rules>
</nlog>
添上argets ,和rules中的内容,模板用的Nuget下载的。
简单使用
logger = ();
("********");
("********");
("********");
("********");
##配置信息
###基本配置·
NLog 根节点 下的配置
-
autoReload
:配置修改是否自动加载。 -
throwExceptions
:日志出现异常时是否需要抛出异常,若配置为true
日志记录异常时由于没有捕获异常,会导致程序挂掉。 -
internalLogLevel
:表示nlog日志的执行日志记录等级。 -
internalLogFile
:表示nlog日志的执行日志记录的位置。通过./XXXX
的方式可以配置到程序的相对目录。日志等级
Level FirstCharacter Ordinal Trace T 0 Debug D 1 Info I 2 Warn W 3 Error E 4 Fatal F 5 Off O 6
target (目标)
<targets async="true"> <target xsi:type="File" name="f" fileName="${basedir}/logs/${shortdate}.log" layout="${longdate} ${uppercase:${level}} ${message}" /></targets>
通过将async
设置为true
可以异步保存日志,从而防止日志影响业务性能。
####xsi:type
输入类型,支持以下类型。
-
ColoredConsole : 使用可自定义的颜色将日志消息写入控制台。
-
Console - 将日志消息写入控制台。
-
Debug - 模拟目标-用于测试。
-
File - 将日志消息写入一个或多个文件。
-
Mail - 使用 smtp 协议或拾取文件夹通过电子邮件发送日志邮件。
-
Null - 丢弃日志消息。主要用于调试和基准测试
具体参数说明
<targets async=” Boolean”> //是否异步 <target xsi:type="File" //输出类型 name="String" //节点名称 layout="Layout" //日志输入格式 header="Layout" //日志头显示的文本内容 footer="Layout" //日志尾显示的文本内容 encoding="Encoding" //文件编码格式 lineEnding="Enum" //行结束模式 archiveAboveSize="Long" //存档上限值 maxArchiveFiles="Integer" //保存的最大存档文件数,默认9 archiveFileName="Layout" //存档文件名称。允许使用Layout archiveNumbering="Enum" //存档文件的编号方式 archiveEvery="Enum" //是否在每个设定时间刻自动存档日志文件 replaceFileContentsOnEachWrite="Boolean" //是否覆盖每次写入的日志内容,默认false fileAttributes="Enum" //文件属性(只支持Windows) fileName="Layout" //写入日志的文件名称 支持Layout deleteOldFileOnStartup="Boolean" //启动时,是否删除旧的日志文件 。默认为false enableFileDelete="Boolean" //否允许删除日志文件。默认为true createDirs="Boolean" //是否允许自动创建(不存在的)目录。默认为true。 concurrentWrites="Boolean" //是否允许使用通过多个进程的方式,将日志信息并行写入文件中。,默认为true openFileCacheTimeout="Integer" //文件保持打开状态的最大时间秒数 openFileCacheSize="Integer" //保持打开状态的文件数量 networkWrites="Boolean" //是否通过多线程由不同的网络主机并行向文件中写入日志默认false concurrentWriteAttemptDelay="Integer" concurrentWriteAttempts="Integer" bufferSize="Integer" //日志文件缓存区大小(字节) 默认值为32768(32KB) autoFlush="Boolean" //在每次日志信息后,是否自动刷新文件缓存区 默认true keepFileOpen="Boolean" //是否保持日志文件处于打开状态,以代替其在每次日志写事件发生时频繁打开和关闭默认值为false。 备注:设置此属性为true,有助于提高性能。 /> </targets>
rules(规则)
<rules> <logger name="*" minlevel="Debug" writeTo="f" /> </rules>
在Nlog
节点下添加rules
节点,rules
节点下可以配置多个logger
节点,每个logger
节点即为一条约束。
-
name
:logger名称,若为*
则表示适用于所有日志,若我们某个target
专门用于类的日志输出,则那么可以设置为
.*
,表示当前约束只允许命名空间为开头的日志输出。
-
minlevel
:表示当前约束的最小等级,只有等于或大于该值的日志等级才会被记录。 -
writeTo
:表示当前规则约束哪个target
。
参考文章
/jun502525164/article/details/40352253
/xishining/article/details/85219755
/itjeff/p/