C# NLog 配置
首先用NuGet安装NLog依赖DLL
NLog
NLog.Config
NLog.Schema
NLog配置文件NLog.config:
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
<?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="${basedir}/Log/nlog-internal.log"> <!-- optional, add some variables https://github.com/nlog/NLog/wiki/Configuration-file#variables --> <!--<variable name="myvar" value="myvalue"/>--> <variable name="logDir" value="${basedir}/Log"/> <variable name="logFileName" value="${date:format=yyyyMMdd}.txt"/> <variable name="logArchiveFileName" value="${date:format=yyyyMMdd}_{#}.txt"/> <variable name="logLayout" value="${date:format=yyyy-MM-dd HH\:mm\:ss.fff} [${level}] ${message}"/> <!-- See https://github.com/nlog/nlog/wiki/Configuration-file for information on customizing logging rules and outputs. --> <targets> <!-- add your targets here See https://github.com/nlog/NLog/wiki/Targets for possible targets. See https://github.com/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 xsi:type="File" name="debug" layout="${logLayout}" fileName="${logDir}/Debug/${logFileName}" archiveFileName="${logDir}/Debug/${logArchiveFileName}" archiveAboveSize="10485760" archiveNumbering="Sequence" maxArchiveFiles="10000" concurrentWrites="true" keepFileOpen="true" openFileCacheTimeout="30" encoding="UTF-8" /> <target xsi:type="File" name="info" layout="${logLayout}" fileName="${logDir}/Info/${logFileName}" archiveFileName="${logDir}/Info/${logArchiveFileName}" archiveAboveSize="10485760" archiveNumbering="Sequence" maxArchiveFiles="10000" concurrentWrites="true" keepFileOpen="true" openFileCacheTimeout="30" encoding="UTF-8" /> <target xsi:type="File" name="error" layout="${logLayout}" fileName="${logDir}/Error/${logFileName}" archiveFileName="${logDir}/Error/${logArchiveFileName}" archiveAboveSize="10485760" archiveNumbering="Sequence" maxArchiveFiles="10000" concurrentWrites="true" keepFileOpen="true" openFileCacheTimeout="30" encoding="UTF-8" /> </targets> <rules> <!-- add your logging rules here --> <!-- 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" /> --> <!-- 不打印Quartz组件的日志 --> <logger name="Quartz.*" maxlevel="Info" final="true" /> <logger name="*" minlevel="Debug" maxlevel="Debug" writeTo="debug" /> <logger name="*" minlevel="Info" maxlevel="Error" writeTo="info" /> <logger name="*" minlevel="Error" maxlevel="Error" writeTo="error" /> </rules> </nlog>
变量定义:
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
private Logger _log = NLog.LogManager.GetLogger("NLogTest");
或者:
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
private Logger _log = NLog.LogManager.GetCurrentClassLogger();
写日志示例:
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
private void button4_Click(object sender, EventArgs e) { Task.Run(() => { Log("==== 开始 ========"); Stopwatch stopwatch = new Stopwatch(); stopwatch.Start(); List<Task> taskList = new List<Task>(); Task tsk = null; int taskCount = 0; tsk = Task.Run(() => { for (int i = 0; i < n; i++) { _log.Info("测试日志 " + i.ToString("000000")); Interlocked.Increment(ref taskCount); } }); taskList.Add(tsk); tsk = Task.Run(() => { for (int i = 0; i < n; i++) { _log.Debug("测试日志 " + i.ToString("000000")); Interlocked.Increment(ref taskCount); } }); taskList.Add(tsk); tsk = Task.Run(() => { for (int i = 0; i < n; i++) { _log.Error("测试日志 " + i.ToString("000000")); Interlocked.Increment(ref taskCount); } }); taskList.Add(tsk); Task.WaitAll(taskList.ToArray()); Log("Task Count=" + taskCount); Log("==== 结束 " + ",耗时:" + stopwatch.Elapsed.TotalSeconds.ToString("0.000") + " 秒 ========"); stopwatch.Stop(); }); }