一、引言
好的框架肯定要有好的日志记录。另外鄙人发现个问题:服务器带域名的项目会报错,而不带域名的和源码执行不报错,因此也要用日志记录下。据说NLog比Log4net效率高。
二、引入NLog插件
三、配置NLog
3.1 新建一个XML
文件,文件名为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" autoReload="true" throwConfigExceptions="true" internalLogLevel="Off" internalLogFile="C:\temp\internal-nlog.txt"> <targets> <!-- Trace级别日志,输出到html文件 --> <target xsi:type="File" name="TraceFile" fileName="${basedir}/logs/${shortdate}_Trace.html" layout="【记录时间】:${longdate} <br> 【文名名称】:${logger} <br> 【日志级别】:${uppercase:${level}} <br> 【日志内容】:${message} ${exception} <hr size=2 color=red>" /> </targets> <rules> <!-- Microsoft.*表示通配符,所有微软日志将被过滤 --> <logger name="Microsoft.*" minlevel="Trace" final="true" /> <logger name="*" minlevel="Trace" writeTo="TraceFile" /> </rules> </nlog>
3.2 引入NLog
的相关组件后,我们需要将NLog
设置为系统的日志管理器,修改Program.cs
文件,代码如下:
添加这2句:
NLogBuilder.ConfigureNLog("nlog.config");
.ConfigureLogging(logging => { logging.ClearProviders(); }) .UseNLog();
总体代码如下:
using Microsoft.AspNetCore.Hosting; using Microsoft.Extensions.Configuration; using Microsoft.Extensions.Hosting; using Microsoft.Extensions.Logging; using NLog.Web; using System; using System.Collections.Generic; using System.Linq; using System.Threading.Tasks; namespace Yadinghao.Web { public class Program { public static void Main(string[] args) { NLogBuilder.ConfigureNLog("nlog.config"); CreateHostBuilder(args).Build().Run(); } public static IHostBuilder CreateHostBuilder(string[] args) => Host.CreateDefaultBuilder(args) .ConfigureWebHostDefaults(webBuilder => { webBuilder.UseStartup<Startup>(); }).ConfigureLogging(logging => { logging.ClearProviders(); }) .UseNLog(); } }
四、写日志
在Controller里面在其构造函数中注入ILogger
接口代码:
private IWebHostEnvironment _Environment; private readonly ILogger<SystemController> _Logger; #region 构造函数 /// <summary> /// SystemController的构造函数 /// </summary> /// <param name="_environment"></param> /// <param name="_logger"></param> public SystemController(IWebHostEnvironment _environment, ILogger<SystemController> _logger) { _Environment = _environment; _Logger = _logger; } #endregion
配置完成就开始写
_Logger.LogDebug(currentXmlFileName);
五、成果展示
很奇怪没写的指定路径