失眠网,内容丰富有趣,生活中的好帮手!
失眠网 > asp.net core 使用NLog记录日志

asp.net core 使用NLog记录日志

时间:2019-09-03 11:28:46

相关推荐

asp.net core 使用NLog记录日志

/qk/p/10627343.html

一、使用VisualStudioCode创建一个webapi项目(也可以是mvc等)、一个类库(用于封装记录日志方法,当然如果使用依赖注入到控制台项目,就不需要此类库了)。

二、在类库中添加NLog、NLog.Web.AspNetCore引用(NLog.Web.AspNetCore 是为 Core 添加了对于 NLog 的平台支持),

webapi项目添加对该类库的引用,这样控制台就无需添加nlog的引用了。

三、在类库中自定义类,简单封装记录日志方法,代码如下:

using System;using Microsoft.Extensions.Logging;using NLog;namespace common{public class NLogHelper{//每创建一个Logger都会有一定的性能损耗,所以定义静态变量private static Logger nLogger = LogManager.GetCurrentClassLogger();public static void Info(string msg){nLogger.Info(msg);} public static void Error(string msg, Exception ex = null){if (ex == null)nLogger.Error(msg);elsenLogger.Error(ex,msg);}}}

四、webapi项目配置NLog

1、添加nLog.config文件,如下:

<?xml version="1.0" encoding="utf-8" ?><nlog xmlns="http://www.nlog-/schemas/NLog.xsd"xmlns:xsi="/2001/XMLSchema-instance"throwConfigExceptions="true"autoReload="true"><!--加载 Core插件--><extensions><add assembly="NLog.Web.AspNetCore"/></extensions><!--输出目的地--><targets> <!--输出到文件,记录level为info的日志--><target xsi:type="File" name="info-file"layout="${longdate}|${uppercase:${level}}|${event-properties:item=EventId.Id}${newline}位置:${callsite:className=True:methodName=True:fileName=True:includeSourcePath=True:skipFrames=1}${newline}${message}${newline}${exception}${newline}" fileName="c:\logfiles\api\info-${shortdate}.log"archiveFileName="c:\logfiles\info-${shortdate}.log"archiveAboveSize="10485760"archiveNumbering="Rolling"concurrentWrites="true"maxArchiveFiles="100000"keepFileOpen="false"/><!--输出到文件,记录level为error的日志--><target xsi:type="File" name="error-file" layout="${longdate}|${uppercase:${level}}|${event-properties:item=EventId.Id}${newline}位置:${callsite:className=True:methodName=True:fileName=True:includeSourcePath=True:skipFrames=1}${newline}${message}${newline}${exception}${newline}" fileName="c:\logfiles\api\error-${shortdate}.log"archiveFileName="c:\logfiles\error-${shortdate}.log"archiveAboveSize="10485760"archiveNumbering="Rolling"concurrentWrites="true"maxArchiveFiles="100000"keepFileOpen="false"/><!--write to the void aka just remove--><target xsi:type="Null" name="blackhole" /></targets><!--写入目的地的规则--><rules> <!--记录level为info的日志--><!-- 跳过以Microsoft.*开头的日志 --><logger name="Microsoft.*" minlevel="Trace" writeTo="blackhole" final="true" /><logger name="*" level="Info" writeTo="info-file" /><!--记录level为error的日志--><logger name="*" level="Error" writeTo="error-file" /></rules></nlog>

nlog 节点必须是 xml 文件的根节点,包含三个主要的子节点:extensions、targets、rules。

extensions节点:用来加载nlog扩展工具,这里加载NLog.Web.AspNetCore 是为 Core 添加了对于 NLog 的平台支持。

targets节点:包含输出的日志的一些设置(比如的日志的路径、类型、布局、txt文件的分割等)。

rules节点:将需要日志级别关联到targets里设置的日志。

targets节点的子节点描述:

layout表示输出日志到txt的排版格式

fileName表示txt文件名,这里我把日志文件存在在C盘(linux系统,改下路径即可)

maxArchiveFiles表示滚动日志文件上限数

archiveFileName表示滚动日志存放路径,超过单个文件大小,会生成如error--03-30.1.log的文件

archiveAboveSize表示每个日志文件大小的最大值(单位:字节),10485760=10M

2、在 Startup.cs的Configure方法配置nlog,如下:

public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory){if (env.IsDevelopment()){app.UseDeveloperExceptionPage();}else{app.UseHsts();}//配置NLogEncoding.RegisterProvider(CodePagesEncodingProvider.Instance);//这是为了防止中文乱码loggerFactory.AddNLog();//添加NLogenv.ConfigureNLog("nlog.config");//读取Nlog配置文件app.UseHttpsRedirection();app.UseMvc();}

五、使用NLog

在webapi的HomeController里代码如下:

[Route("api/Home/[action]")][ApiController]public class HomeController : ControllerBase{public ActionResult<IEnumerable<string>> Get(){NLogHelper.Info("这是info日志");NLogHelper.Error("这是error日志",new Exception("测试"));//这里随便返回一下return new string[] { "value1", "value2" };}}

运行:https://localhost:5001/api/home/get

在C盘生成文件,如下:

打开txt文件,日志格式如下:

如果觉得《asp.net core 使用NLog记录日志》对你有帮助,请点赞、收藏,并留下你的观点哦!

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。