NLog在.NET Core Console Apps中的簡單應用

FrankYou發表於2016-07-22

什麼是NLog?

NLog is a free logging platform for .NET with rich log routing and management capabilities. It makes it easy to produce and manage high-quality logs for your application regardless of its size or complexity.

It can process diagnostic messages emitted from any .NET language, augment them with contextual information, format them according to your preference and send them to one or more targets such as file or database.

NLog在GitHub的官網:https://github.com/NLog

NLog for .NET Core:https://github.com/NLog/NLog.Extensions.Logging

建立一個.NET Core Console 應用

使用CLI(Command Line Interface)建立一個example程式:

  • dotnet new
  • dotnet restore
  • dotnet run

這些命令列的具體意思這裡就不再贅述。

更改project.json的配置

主要是新增了NLog相關的配置:

  • NLog的包引用;
  • 程式釋出時包含NLog的配置檔案。

新增NLog的配置檔案

在程式的根目錄下新增NLog的配置檔案: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="Warn"
      internalLogFile="internal-nlog.txt">

  <!-- define various log targets -->
  <targets>
    <!-- write logs to file -->
    <target xsi:type="File" name="allfile" fileName="nlog-all-${shortdate}.log"
                 layout="${longdate}|${event-properties:item=EventId.Id}|${logger}|${uppercase:${level}}|${message} ${exception}" />

    <target xsi:type="File" name="ownFile-web" fileName="nlog-own-${shortdate}.log"
             layout="${longdate}|${threadid}|${event-properties:item=EventId.Id}|${logger}|${uppercase:${level}}|  ${message} ${exception}" />

    <target xsi:type="Null" name="blackhole" />
  </targets>

  <rules>
    <!--Skip Microsoft logs and so log only own logs-->
    <logger name="Microsoft.*" minlevel="Trace" writeTo="blackhole" final="true" />
    <!--All logs, including from Microsoft-->
    <logger name="*" minlevel="Trace" writeTo="allfile" />
    <logger name="*" minlevel="Info" writeTo="ownFile-web" />
  </rules>
</nlog>

在Startup類中註冊NLog的MiddleWare

 1 using Microsoft.AspNetCore.Builder;
 2 using Microsoft.AspNetCore.Hosting;
 3 using Microsoft.AspNetCore.Http;
 4 using Microsoft.Extensions.Logging;
 5 using NLog.Extensions.Logging;
 6 
 7 namespace ConsoleApplication
 8 {
 9     public class Startup
10     {
11         public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory)
12         {
13             // Add NLog to ASP.NET Core
14             loggerFactory.AddNLog();
15             
16             // configure nlog.config in your project root
17             env.ConfigureNLog("nlog.config");
18 
19             app.Run(context =>
20             {
21                 return context.Response.WriteAsync("Hello World!!");
22             });
23         }
24     }
25 }

在入口類中記錄日誌

 1 using System.Threading;
 2 using Microsoft.AspNetCore.Hosting;
 3 using NLog;
 4 
 5 namespace ConsoleApplication
 6 {
 7     public class Program
 8     {
 9         private static Logger logger = LogManager.GetCurrentClassLogger();
10         public static void Main(string[] args)
11         {
12             logger.Info("Server is running...");
13             logger.Info(string.Format("Current Thead Id:{0}", Thread.CurrentThread.ManagedThreadId));
14             var host = new WebHostBuilder().UseKestrel().UseStartup<Startup>().Build();
15             host.Run();
16         }
17     }
18 }

執行程式後會在主目錄下生成2個日誌檔案:

 

相關文章