.net Core 配置 Nlog

.net Core 配置 Nlog

  1. 在nuget 包当中添加 Nlog.Web.AspNetCore 包(在控制器层)

  2. 在控制器层创建一个nlog.config 文件

  3. 将以下代码复制到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"
         internalLogFile="c:\temp\internal-nlog-AspNetCore.txt">

     <!-- enable asp.net core layout renderers -->
     <extensions>
       <add assembly="NLog.Web.AspNetCore"/>
     </extensions>

     <!-- the targets to write to -->
     <targets>
       <!-- File Target for all log messages with basic details -->
       <target xsi:type="File" name="allfile" fileName="c:\temp\nlog-AspNetCore-all-${shortdate}.log"
               layout="${longdate}|${event-properties:item=EventId_Id:whenEmpty=0}|${level:uppercase=true}|${logger}|${message} ${exception:format=tostring}" />

       <!-- File Target for own log messages with extra web details using some ASP.NET core renderers -->
       <target xsi:type="File" name="ownFile-web" fileName="c:\temp\nlog-AspNetCore-own-${shortdate}.log"
               layout="${longdate}|${event-properties:item=EventId_Id:whenEmpty=0}|${level:uppercase=true}|${logger}|${message} ${exception:format=tostring}|url: ${aspnet-request-url}|action: ${aspnet-mvc-action}|${callsite}" />

       <!--Console Target for hosting lifetime messages to improve Docker / Visual Studio startup detection -->
       <target xsi:type="Console" name="lifetimeConsole" layout="${MicrosoftConsoleLayout}" />
     </targets>

     <!-- rules to map from logger name to target -->
     <rules>
       <!--All logs, including from Microsoft-->
       <logger name="*" minlevel="Trace" writeTo="allfile" />

       <!--Output hosting lifetime messages to console target for faster startup detection -->
       <logger name="Microsoft.Hosting.Lifetime" minlevel="Info" writeTo="lifetimeConsole, ownFile-web" final="true" />

       <!--Skip non-critical Microsoft logs and so log only own logs (BlackHole) -->
       <logger name="Microsoft.*" maxlevel="Info" final="true" />
       <logger name="System.Net.Http.*" maxlevel="Info" final="true" />

       <logger name="*" minlevel="Trace" writeTo="ownFile-web" />
     </rules>
    </nlog>
  4. 修改 program.cs 文件,代码如下

    using Microsoft.AspNetCore.Hosting;
    using Microsoft.Extensions.Hosting;
    using Microsoft.Extensions.Logging;
    using System;
    using NLog.Web;

    namespace ASP.NET_Core_5_NLog_Example
    {
       public class Program
      {
           public static void Main(string[] args)
          {
               var logger = NLog.LogManager.Setup().LoadConfigurationFromAppSettings().GetCurrentClassLogger();

               try
              {
                   logger.Debug("init main");
                   CreateHostBuilder(args).Build().Run();
              }
               catch (Exception exception)
              {
                   //NLog: catch setup errors
                   logger.Error(exception, "Stopped program because of exception");
                   throw;
              }
               finally
              {
                   // Ensure to flush and stop internal timers/threads before application-exit (Avoid segmentation fault on Linux)
                   NLog.LogManager.Shutdown();
              }
          }

           public static IHostBuilder CreateHostBuilder(string[] args) =>
               Host.CreateDefaultBuilder(args)
                  .ConfigureWebHostDefaults(webBuilder =>
                  {
                       webBuilder.UseStartup<Startup>();
                  })
                  .ConfigureLogging(logging =>
                  {
                       logging.ClearProviders();
                       logging.SetMinimumLevel(Microsoft.Extensions.Logging.LogLevel.Trace);
                  })
                  .UseNLog();  // NLog: Setup NLog for Dependency injection
      }
    }
  5.  

 

posted @ 2022-03-29 00:00  刃玄  阅读(543)  评论(0编辑  收藏  举报