關於NLog在.NET CORE下如何進行日志的持久化及通過郵件發送日志


配置過程

  1. 安裝NLog

    通過Nuget進行集成(NuGet Gallery | NLog.Web.AspNetCore 4.14.0)

    通過命令行安裝 Install-Package NLog.Web.AspNetCore -Version 4.14.0

    通過可視化管理工具查找並安裝 NLog.Web.AspNetCore

  2. 修改Program.cs

    public static IHostBuilder CreateHostBuilder(string[] args) =>
            Host.CreateDefaultBuilder(args)
                .ConfigureLogging((context, builder) =>
                {
                    // 適配原來的Log配置
                    builder.AddConfiguration(context.Configuration.GetSection("Logging"));
                    builder.AddConsole();
                    builder.AddDebug();
                    builder.AddEventSourceLogger();
                    // 以下關鍵配置
                    builder.AddNLogWeb();
                    builder.AddNLog();
                    // 關鍵配置結束
                })
                .ConfigureWebHostDefaults(webBuilder =>
                {
                    webBuilder.UseUrls("http://*:5000");
                    webBuilder.UseStartup<Startup>();
                });
    
  3. 配置Startup.cs

    public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
    {
        ......
        
        // 在UseEndpoints之前增加如下增加對部分 Layout renderers 的支持
        app.Use(async (context, next) => {
            context.Request.EnableBuffering();
            await next();
        });
        
        ......
    }
    
  4. 增加NLog.config

    注意此文件配置為復制到輸出目錄
    每一項的配置可以參考下方的NLog配置項

    <?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">
    
        <targets>
            <!-- 文件持久化 -->
            <target name="f1" xsi:type="File"
                    layout="PROJECT:${iis-site-name}${newline}
    REQUEST:${newline}
    ${aspnet-request-method} ${aspnet-request-url}${newline}
    QUERYSTRING:${newline}
    ${aspnet-request-querystring}${newline}
    HEADERS:${newline}
    ${aspnet-request-headers}${newline}
    FORM:${newline}
    ${aspnet-request-form}${newline}
    POSTED-BODY:${newline}
    ${aspnet-request-posted-body}${newline}
    COOKIE:${newline}
    ${aspnet-request-cookie}${newline}${newline}
    ${longdate}|${uppercase:${level}}|${logger}${newline}${newline}
    ${message}${newline}${newline}
    ${exception:format=ToString}"
                    fileName="Logs\nlog-all-${shortdate}.log" />
            <!-- 郵件支持 -->
            <target xsi:type="Mail"
                    name="m1"
                    html="true"
                    replaceNewlineWithBrTagInHtml="true"
                    addNewLines="true"
                    subject="發送郵件主題:[測試項目][${level}]${message}"
                    to="接收人郵箱"
                    from="發送人郵箱"
                    body="PROJECT:${iis-site-name}${newline}
    REQUEST:${newline}
    ${aspnet-request-method} ${aspnet-request-url}${newline}
    QUERYSTRING:${newline}
    ${aspnet-request-querystring}${newline}
    HEADERS:${newline}
    ${aspnet-request-headers}${newline}
    FORM:${newline}
    ${aspnet-request-form}${newline}
    POSTED-BODY:${newline}
    ${aspnet-request-posted-body}${newline}
    COOKIE:${newline}
    ${aspnet-request-cookie}${newline}${newline}
    ${longdate}|${uppercase:${level}}|${logger}${newline}${newline}
    ${message}${newline}${newline}
    ${exception:format=ToString}"
                    smtpUserName="發送人賬號"
                    enableSsl="true"
                    smtpPassword="發送人密碼"
                    smtpAuthentication="Basic"
                    smtpServer="發送郵箱的smtp"
                    smtpPort="發送郵箱的smtp端口" />
    
        </targets>
    
        <rules>
            <logger name="*" minlevel="Error" writeTo="f1" />
            <logger name="*" minlevel="Error" maxlevel="Error" writeTo="m1" />
        </rules>
    </nlog>
    

相關資源

NLog官網:NLog (nlog-project.org)

NLog配置項:Config | NLog (nlog-project.org)


免責聲明!

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



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