NetCore3.1 日志組件 Nlog的使用


1.添加Nuget程序包

 NLog 

NLog.Web.AspNetCore

NetCore3.1 日志組件 Nlog的使用-LMLPHP

2.創建名稱為: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="Info">
    <!-- 啟用.net core的核心布局渲染器 -->
    <extensions>
        <add assembly="NLog.Web.AspNetCore" />
    </extensions>
    <!-- 寫入日志的目標配置 -->
    <targets>
        <!-- 調試  -->
        <target xsi:type="File" name="debug" fileName="logs/debug-${shortdate}.log" layout="${longdate}|${event-properties:item=EventId_Id}|${uppercase:${level}}|${logger}|${message} ${exception:format=tostring}|url: ${aspnet-request-url}|action: ${aspnet-mvc-action}" />
        <!-- 警告  -->
        <target xsi:type="File" name="warn" fileName="logs/warn-${shortdate}.log" layout="${longdate}|${event-properties:item=EventId_Id}|${uppercase:${level}}|${logger}|${message} ${exception:format=tostring}|url: ${aspnet-request-url}|action: ${aspnet-mvc-action}" />
        <!-- 錯誤  -->
        <target xsi:type="File" name="error" fileName="logs/error-${shortdate}.log" layout="${longdate}|${event-properties:item=EventId_Id}|${uppercase:${level}}|${logger}|${message} ${exception:format=tostring}|url: ${aspnet-request-url}|action: ${aspnet-mvc-action}" />
    </targets>
    <!-- 映射規則 -->
    <rules>
        <!-- 調試  -->
        <logger name="*" minlevel="Trace" maxlevel="Debug" writeTo="debug" />
        <!--跳過不重要的微軟日志-->
        <logger name="Microsoft.*" maxlevel="Info" final="true" />
        <!-- 警告  -->
        <logger name="*" minlevel="Info" maxlevel="Warn" writeTo="warn" />
        <!-- 錯誤  -->
        <logger name="*" minlevel="Error" maxlevel="Fatal" writeTo="error" />
    </rules>
</nlog>

3.Program.cs 添加Nlog

public class Program
    {
        public static void Main(string[] args)
        {
            //這里添加Nlog
            var logger = NLog.Web.NLogBuilder.ConfigureNLog("nlog.config").GetCurrentClassLogger();
            try
            {
                //測試Nlog日志輸出
                logger.Debug("init main");
                CreateHostBuilder(args).Build().Run();
            }
            catch (Exception exception)
            {
                logger.Error(exception, "Stopped program because of exception");
                throw;
            }
            finally
            {
                NLog.LogManager.Shutdown();
            }
        }

        public static IHostBuilder CreateHostBuilder(string[] args) =>
            Host.CreateDefaultBuilder(args)
                .ConfigureWebHostDefaults(webBuilder =>
                {
                    webBuilder.UseStartup<Startup>();
                }).UseNLog();//添加你的日志組件
    }

4.通過構造方法注入實現寫日志功能

using FranchiseeInterface.Franchisee;
using Microsoft.AspNetCore.Hosting;
using Microsoft.AspNetCore.Http;
using Microsoft.Extensions.Logging;
using Newtonsoft.Json;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;

namespace FranchiseeApi.Helper.Middlewares
{
    public class ExceptionMiddlewares
    {
        private readonly RequestDelegate next;
        private IHostingEnvironment environment;
        //Nlog構造方法注入
        private readonly ILogger<ExceptionMiddlewares> _logger;
        public ExceptionMiddlewares(RequestDelegate next, IHostingEnvironment environment, ILogger<ExceptionMiddlewares> logger)
        {
            _logger = logger;
            this.next = next;
            this.environment = environment;
        }

        public async Task Invoke(HttpContext context)
        {
            try
            {
                await next.Invoke(context);
                var features = context.Features;
            }
            catch (Exception e)
            {
                await HandleException(context, e);
            }
        }

        private async Task HandleException(HttpContext context, Exception e)
        {
            context.Response.StatusCode = 500;
            context.Response.ContentType = "text/json;charset=utf-8;";
            string error = "";

            if (environment.IsDevelopment())
            {
                var json = new { message = e.Message };
                //// log.Error(json);
                //_logger.LogDebug("這里是homeController構造方法");
                //_logger.Log(LogLevel.Information,"測試");
                _logger.LogError(JsonConvert.SerializeObject(json));
                error = JsonConvert.SerializeObject(json);
            }
            else
                error = "抱歉,出錯了";

            await context.Response.WriteAsync(error);
        }
    }
}

至此,就結束了。


免責聲明!

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



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