一篇关于NLog-ASP.NET Core 5入门

开发 后端
如果删除所有其他LoggingProviders(如控制台)并且仅使用NLog,则可能必须特别注意Hosting Lifetime Startup Messages。因为这可能导致托管环境(Visual Studio / Docker / Azure容器)看不到已启动的应用程序。

[[402836]]

本文转载自微信公众号「后端Q」,作者conan。转载本文请联系后端Q公众号。

1、创建一个新的ASP.NET Core项目

在Visual Studio 2019中。需要版本16.8+

2、手动或使用NuGet在csproj中添加依赖项

安装最新版本:

  • NLog.Web.AspNetCore 4.9+
  • 如有可能,更新NLog软件包

在csproj中:

  1. <ItemGroup> 
  2.   <PackageReference Include="NLog.Web.AspNetCore" Version="4.9.3" /> 
  3.   <PackageReference Include="NLog" Version="4.7.6" /> 
  4. </ItemGroup> 

 

3、创建一个nlog.config文件。

在项目的根目录中创建nlog.config(全部小写)文件。

我们使用以下示例:

  1. <?xml version="1.0" encoding="utf-8" ?> 
  2. <nlog xmlns="http://www.nlog-project.org/schemas/NLog.xsd" 
  3.       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
  4.       autoReload="true" 
  5.       internalLogLevel="Info" 
  6.       internalLogFile="c:\temp\internal-nlog.txt"
  7.  
  8.   <!-- enable asp.net core layout renderers --> 
  9.   <extensions> 
  10.     <add assembly="NLog.Web.AspNetCore"/> 
  11.   </extensions> 
  12.  
  13.   <!-- the targets to write to --> 
  14.   <targets> 
  15.     <!-- write logs to file  --> 
  16.     <target xsi:type="File" name="allfile" fileName="c:\temp\nlog-all-${shortdate}.log" 
  17.             layout="${longdate}|${event-properties:item=EventId_Id}|${uppercase:${level}}|${logger}|${message} ${exception:format=tostring}" /> 
  18.  
  19.     <!-- another file log, only own logs. Uses some ASP.NET core renderers --> 
  20.     <target xsi:type="File" name="ownFile-web" fileName="c:\temp\nlog-own-${shortdate}.log" 
  21.             layout="${longdate}|${event-properties:item=EventId_Id}|${uppercase:${level}}|${logger}|${message} ${exception:format=tostring}|url: ${aspnet-request-url}|action: ${aspnet-mvc-action}" /> 
  22.   </targets> 
  23.  
  24.   <!-- rules to map from logger name to target --> 
  25.   <rules> 
  26.     <!--All logs, including from Microsoft--> 
  27.     <logger name="*" minlevel="Trace" writeTo="allfile" /> 
  28.  
  29.     <!--Skip non-critical Microsoft logs and so log only own logs--> 
  30.     <logger name="Microsoft.*" maxlevel="Info" final="true" /> <!-- BlackHole without writeTo --> 
  31.     <logger name="System.Net.Http.*" maxlevel="Info" final="true" /> <!-- BlackHole without writeTo --> 
  32.  
  33.     <logger name="*" minlevel="Trace" writeTo="ownFile-web" /> 
  34.   </rules> 
  35. </nlog> 

 

 

 

请注意,如果删除所有其他LoggingProviders(如控制台)并且仅使用NLog,则可能必须特别注意Hosting Lifetime Startup Messages。因为这可能导致托管环境(Visual Studio / Docker / Azure容器)看不到已启动的应用程序。

4、更新program.cs

更新program.cs

  1. using Microsoft.AspNetCore.Hosting; 
  2. using Microsoft.Extensions.Hosting; 
  3. using Microsoft.Extensions.Logging; 
  4. using System; 
  5. using NLog.Web; 
  6.  
  7. namespace ASP.NET_Core_5_NLog_Example 
  8.     public class Program 
  9.     { 
  10.         public static void Main(string[] args) 
  11.         { 
  12.             var logger = NLogBuilder.ConfigureNLog("nlog.config").GetCurrentClassLogger(); 
  13.             try 
  14.             { 
  15.                 logger.Debug("init main"); 
  16.                 CreateHostBuilder(args).Build().Run(); 
  17.             } 
  18.             catch (Exception exception) 
  19.             { 
  20.                 //NLog: catch setup errors 
  21.                 logger.Error(exception, "Stopped program because of exception"); 
  22.                 throw; 
  23.             } 
  24.             finally 
  25.             { 
  26.                 // Ensure to flush and stop internal timers/threads before application-exit (Avoid segmentation fault on Linux) 
  27.                 NLog.LogManager.Shutdown(); 
  28.             } 
  29.         } 
  30.  
  31.         public static IHostBuilder CreateHostBuilder(string[] args) => 
  32.             Host.CreateDefaultBuilder(args) 
  33.                 .ConfigureWebHostDefaults(webBuilder => 
  34.                 { 
  35.                     webBuilder.UseStartup<Startup>(); 
  36.                 }) 
  37.                 .ConfigureLogging(logging => 
  38.                 { 
  39.                     logging.ClearProviders(); 
  40.                     logging.SetMinimumLevel(LogLevel.Trace); 
  41.                 }) 
  42.                 .UseNLog();  // NLog: Setup NLog for Dependency injection 
  43.     } 

5、配置appsettings.json / appsettings.Development.json

中指定的日志记录配置appsettings.json会覆盖对的任何调用SetMinimumLevel。因此"Default":,请根据您的需要删除或正确调整它。

  1.   "Logging": { 
  2.     "IncludeScopes"false
  3.     "LogLevel": { 
  4.       "Default""Trace"
  5.       "Microsoft""Warning"
  6.       "Microsoft.Hosting.Lifetime""Information" 
  7.     } 
  8.   }, 
  9.   "AllowedHosts""*" 

切记还要更新任何特定于环境的配置,以免引起任何意外。前任appsettings.Development.json

6、写日志

将ILogger注入您的控制器中:

  1. using Microsoft.Extensions.Logging; 
  2.  
  3. public class HomeController : Controller 
  4.     private readonly ILogger<HomeController> _logger; 
  5.  
  6.     public HomeController(ILogger<HomeController> logger) 
  7.     { 
  8.         _logger = logger; 
  9.         _logger.LogDebug(1, "NLog injected into HomeController"); 
  10.     } 
  11.  
  12.     public IActionResult Index() 
  13.     { 
  14.         _logger.LogInformation("Hello, this is the index!"); 
  15.         return View(); 
  16.     } 

7、示例输出

启动ASP.NET Core网站时,我们得到两个文件:

  1. 2020-12-29 16:47:02.5291||DEBUG|ASP.NET_Core_5_NLog_Example.Program|init main |url: |action:  
  2. 2020-12-29 16:47:03.5943|1|DEBUG|ASP.NET_Core_5_NLog_Example.Controllers.HomeController|NLog injected into HomeController |url: https://localhost/|actionIndex 
  3. 2020-12-29 16:47:03.5943||INFO|ASP.NET_Core_5_NLog_Example.Controllers.HomeController|Hello, this is the index! |url: https://localhost/|actionIndex 
  1. 2020-12-29 16:47:02.5291||DEBUG|ASP.NET_Core_5_NLog_Example.Program|init main  
  2. 2020-12-29 16:47:03.5260||INFO|Microsoft.Hosting.Lifetime|Application started. Press Ctrl+C to shut down.  
  3. 2020-12-29 16:47:03.5260||INFO|Microsoft.Hosting.Lifetime|Hosting environment: Development  
  4. 2020-12-29 16:47:03.5260||INFO|Microsoft.Hosting.Lifetime|Content root path: D:\nlog\NLog.Web\examples\ASP.NET Core 5\ASP.NET Core 5 NLog Example  
  5. 2020-12-29 16:47:03.5943|1|DEBUG|ASP.NET_Core_5_NLog_Example.Controllers.HomeController|NLog injected into HomeController  
  6. 2020-12-29 16:47:03.5943||INFO|ASP.NET_Core_5_NLog_Example.Controllers.HomeController|Hello, this is the index

 

责任编辑:武晓燕 来源: 后端Q
相关推荐

2021-01-04 05:44:54

框架日志

2021-07-12 10:36:36

Blazor组件入门

2023-04-20 08:00:00

ES搜索引擎MySQL

2021-09-15 19:05:16

数据开源项目

2021-03-18 07:33:54

PDF DinkToPdfC++

2015-01-07 09:32:50

ASP.NET MVC路由

2021-03-08 00:09:47

日志分布式管理

2022-02-21 09:44:45

Git开源分布式

2021-01-28 08:55:48

Elasticsear数据库数据存储

2022-08-26 10:32:21

MongoDB数据库

2021-07-21 09:48:20

etcd-wal模块解析数据库

2022-11-08 10:52:25

Flowable节点表单

2021-10-11 11:08:33

HDFS快照系统

2022-07-06 07:57:37

Zookeeper分布式服务框架

2021-05-14 16:34:12

Semaphore原理

2018-08-20 08:03:46

跨平台 Web操作系统

2020-12-24 08:07:18

SpringBootSpring SecuWeb

2009-07-27 12:22:03

ASP.NET和ASPASP.NET入门教程

2022-05-08 19:58:10

JSONPJavaScript

2021-09-05 07:55:36

Lsm核心实现
点赞
收藏

51CTO技术栈公众号