一、新建ASP.NET Core 2.0 MVC项目,使用NuGet在浏览中搜索:NLog.Web.AspNetCore,如下图所示:
二、在项目的根目录下新建一个xml类型的nlog.config文件
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" internalLogLevel="Warn" internalLogFile="internal-nlog.txt"> <!--define various log targets--> <targets> <!--write logs to file--> <target xsi:type="File" name="allfile" fileName="nlog-all-${shortdate}.log" layout="${longdate}|${logger}|${uppercase:${level}}|${message} ${exception}" /> <target xsi:type="File" name="ownFile-web" fileName="nlog-my-${shortdate}.log" layout="${longdate}|${logger}|${uppercase:${level}}|${message} ${exception}" /> <target xsi:type="Null" name="blackhole" /> </targets> <rules> <!--All logs, including from Microsoft--> <logger name="*" minlevel="Trace" writeTo="allfile" /> <!--Skip Microsoft logs and so log only own logs--> <logger name="Microsoft.*" minlevel="Trace" writeTo="blackhole" final="true" /> <logger name="*" minlevel="Trace" writeTo="ownFile-web" /> </rules> </nlog>
三、在Startup类中添加配置
在Configure方法中增加ILoggerFactory loggerFactory参数,然后添加2行代码, 如下所示:
public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory) { if (env.IsDevelopment()) { app.UseDeveloperExceptionPage(); } else { app.UseExceptionHandler("/Home/Error"); app.UseHsts(); } app.UseHttpsRedirection(); app.UseStaticFiles(); app.UseCookiePolicy(); app.UseAuthentication(); loggerFactory.AddNLog();//*****使用NLog作为日志记录工具 env.ConfigureNLog("Nlog.config");//*****引入Nlog配置文件 app.UseMvc(routes => { routes.MapRoute( name: "default", template: "{controller=Home}/{action=Index}/{id?}"); }); }
四、Program.cs中绑定
public static IWebHostBuilder CreateWebHostBuilder(string[] args) =>
WebHost.CreateDefaultBuilder(args)
.UseStartup<Startup>()
.UseNLog();//使用Nlog日志
五、在控制器IActionResult中使用Nlog
//获得日志的实例 public static Logger nlog = LogManager.GetCurrentClassLogger(); public IActionResult Index() { nlog.Info("普通信息日志-----------"); nlog.Debug("调试日志-----------"); nlog.Error("错误日志-----------"); nlog.Fatal("异常日志-----------"); nlog.Warn("警告日志-----------"); nlog.Trace("跟踪日志-----------"); nlog.Log(LogLevel.Warn, "Log日志------------------"); return View(); }
注:NLog日志的位置默认是在bin\Debug下面。
参考:http://www.voidcn.com/article/p-hukbuiwx-bch.html
其他参考的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="info" internalLogFile="d:\log\internal-nlog.txt"> <!-- the targets to write to --> <targets> <!-- write logs to file --> <target xsi:type="File" name="allfile" fileName="d:\log\nlog-all-${shortdate}.log" layout="${longdate}|${event-properties:item=EventId_Id:whenEmpty=0}|${uppercase:${level}}|${logger}|${message} ${exception:format=tostring}" /> <!-- another file log, only own logs. Uses some ASP.NET core renderers --> <target xsi:type="File" name="ownFile-web" fileName="d:\log\nlog-own-${shortdate}.log" layout="${longdate}|${event-properties:item=EventId_Id:whenEmpty=0}|${uppercase:${level}}|${logger}|${message} ${exception:format=tostring}|url: ${aspnet-request-url}|action: ${aspnet-mvc-action}|${callsite}" /> </targets> <!-- rules to map from logger name to target --> <rules> <!--All logs, including from Microsoft--> <logger name="*" minlevel="Trace" writeTo="allfile" /> <!--Skip non-critical Microsoft logs and so log only own logs--> <logger name="Microsoft.*" maxlevel="Info" final="true" /> <!-- BlackHole --> <logger name="*" minlevel="Trace" writeTo="ownFile-web" /> </rules> </nlog>
自己配置的的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" throwExceptions="false" internalLogLevel="Off" internalLogFile="c:\temp\nlog-internal.log"> <!--autoReload修改配置文件后是否允许自动加载无须重启程序--> <!--throwExceptions 内部日志系统抛出异常,建议throwExceptions的值设为“false”,这样由于日志引发的问题不至于导致应用程序的崩溃。--> <!--internalLogLevel 可选Trace|Debug|Info|Warn|Error|Fatal决定内部日志的级别 Off 关闭--> <!--internalLogFile 把内部的调试和异常信息都写入指定文件里--> <!--定义常量--> <variable name="logDirectory" value="${basedir}/logs/${shortdate}"/> <variable name="layoutVal" value="${longdate} ${uppercase:${level}} ${message}"/> <targets> <!--输出目标: name名称, xsi:type输出类型文件, fileName输出到程序根目录logs文件夹中, 以日期作为生成log文件名称, maxArchiveDays="14" 保留14天内的日志 maxArchiveFiles="14" 保留文档最大数量为14 layout生成内容的格式 --> <target name="all" xsi:type="File" encoding="utf-8" fileName="${logDirectory}/all.log" maxArchiveDays="7" maxArchiveFiles="7" layout="${layoutVal}" /> <target name="debug" xsi:type="File" encoding="utf-8" fileName="${logDirectory}/debug.log" maxArchiveDays="7" maxArchiveFiles="7" layout="${layoutVal}" /> <target name="error" xsi:type="File" encoding="utf-8" fileName="${logDirectory}/error.log" maxArchiveDays="14" maxArchiveFiles="14" layout="${layoutVal}" /> </targets> <!--不输出--> <target xsi:type="Null" name="blackhole" /> <rules> <!-- name:记录者的名字。 minlevel :最低日志级别。 maxlevel:最高日志级别。 level:单一日志级别。 levels:一系列日志级别,由逗号分隔。 final:是否是最后的匹配路由,true表示匹配到这里就结束。 writeTo:规则匹配时日志应该被写入的一系列目标,由逗号分隔。就是tagets对应的name。 日志级别有如下,自上而下,等级递增。 - Trace - 最常见的记录信息,一般用于普通输出 - Debug - 同样是记录信息,不过出现的频率要比Trace少一些,一般用来调试程序 - Info - 信息类型的消息 - Warn - 警告信息,一般用于比较重要的场合 - Error - 错误信息 - Fatal - 致命异常信息。一般来讲,发生致命异常之后程序将无法继续执行。 --> <!--Info级别以上日志写入info--> <logger name="*" minlevel="Trace" writeTo="all" /> <!--屏蔽掉微软系统日志,只输出自己的日志--> <logger name="Microsoft.*" minlevel="Trace" writeTo="blackhole" final="true" /> <!--Debuy日志,单独写入debug--> <logger name="*" level="Debug" writeTo="debug" /> <!--Error日志,单独写入error--> <logger name="*" level="Error" writeTo="error" /> </rules> </nlog>