asp.net core 使用NLog記錄日志到txt文件


一、使用VisualStudioCode創建一個webapi項目(也可以是mvc等)、一個類庫(用於封裝記錄日志方法,當然如果使用依賴注入到控制台項目,就不需要此類庫了)。

 

二、在類庫中添加NLog、NLog.Web.AspNetCore引用(NLog.Web.AspNetCore 是為 ASP.NET 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);
            else
                nLogger.Error(ex,msg);
        }
    }
}

 

四、webapi項目配置NLog

1、添加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"
      throwConfigExceptions="true"
      autoReload="true">
 
  <!--加載ASP.NET 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 是為 ASP.NET Core 添加了對於 NLog 的平台支持。
targets節點:包含輸出的日志的一些設置(比如的日志的路徑、類型、布局、txt文件的分割等)。
rules節點:將需要日志級別關聯到targets里設置的日志。
 
targets節點的子節點描述:
layout表示輸出日志到txt的排版格式
fileName表示txt文件名, 這里我把日志文件存在在C盤(linux系統,改下路徑即可)
maxArchiveFiles表示滾動日志文件上限數
archiveFileName表示滾動日志存放路徑,超過單個文件大小,會生成如error-2019-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();
            }

            //配置NLog
            Encoding.RegisterProvider(CodePagesEncodingProvider.Instance);//這是為了防止中文亂碼
            loggerFactory.AddNLog();//添加NLog
            env.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文件,日志格式如下:

 

 六、源碼

碼雲:https://gitee.com/qk2017/CoreNLogDemo

CSDN:https://download.csdn.net/download/coderk2014/11074608

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM