隐藏

C# NLog入门

发布:2023/6/4 20:55:51作者:管理员 来源:本站 浏览次数:318

文章目录


   前言

   一、特征

   二、目标

   三、支持

   四、入门

       1.添加引用

       2.创建配置文件

       3.启用复制到bin文件夹

       4.更新program.cs

       5.配置appsettings.json

       6.写日志

       7.输出示例


前言


   NLog是适用于各种.NET平台(包括.NET标准)的灵活,免费的日志记录平台。NLog使写入多个目标变得容易 。(数据库,文件,控制台)并即时更改日志记录配置。

   NLog支持结构化 和传统日志记录。

   NLog的重点是:高性能,易于使用,易于扩展和灵活配置。


一、特征


   易于配置:

   通过配置文件 和以编程方式,NLog都非常易于配置。即使不重新启动应用程序,也可以更改配置。

   可模板化:

   每个日志消息都可以使用各种布局渲染进行模板化

   可扩展的:

   即使NLog具有目标和预定义的布局,您也可以编写自定义目标或传递自定义值

   结构化日志:

   全面支持结构化日志记录


二、目标


目标用于显示,存储日志消息或将日志消息传递到另一个目标。NLog可以为每个日志消息动态写入多个目标之一。

现成提供了30多个目标,其中包括:


   事件记录日志

   写入事件日志本地或远程


   数据库

   将日志存储在.NET支持的 数据库中


   控制台

   实时写入命令行控制台,包括消息的 颜色编码


   电子邮件

   每当出现应用程序错误时, 您都可以发送电子邮件


   ASP.NET核心记录

   将日志消息写入ASP.NET Core日志记录


   还有一些包装器目标,它们提供 缓冲, 负载平衡, 故障转移情况, 异步写入和更多方案。目标的完整列表在配置选项页面上。如果找不到适合您需求的目标,则可以 轻松编写自定义目标。


三、支持


NLog支持以下平台:


   .NET Framework 3.5、4、4.5-4.8

   .NET Framework 4客户端配置文件

   Xamarin Android

   Xamarin iOs

   Windows Phone 8

   Silverlight 4和5

   单声道4

   ASP.NET 4(NLog.Web程序包)

   ASP.NET Core(NLog.Web.AspNetCore程序包)

   .NET Core(NLog.Extensions.Logging程序包)

   .NET Standard 1.x-NLog 4.5

   .NET Standard 2.x-NLog 4.5

   UWP-NLog 4.5


四、入门


示例使用.net 5 MVC 演示文本日志记录方式

1.添加引用


版本请酌情晒下使用

2.创建配置文件


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


<configuration>

<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.txt">

<extensions>

<add assembly="NLog.Web.AspNetCore"/>

</extensions>


<targets>

<target xsi:type="File" name="allfile" fileName="c:\temp\nlog-all-${shortdate}.log"

layout="${longdate}|${event-properties:item=EventId_Id}|${uppercase:${level}}|${logger}|${message} ${exception:format=tostring}" />

<target xsi:type="File" name="ownFile-web" fileName="c:\temp\nlog-own-${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" writeTo="allfile" />

<logger name="Microsoft.*" maxlevel="Info" final="true" />

<logger name="*" minlevel="Trace" writeTo="ownFile-web" />

</rules>

</nlog>


</configuration>


 


3.启用复制到bin文件夹


为nlog.config启用复制到bin文件夹


或.csproj手动编辑文件并添加:


<ItemGroup>

   <Content Update="nlog.config" CopyToOutputDirectory="PreserveNewest" />

</ItemGroup>




4.更新program.cs


public class Program

   {

       public static void Main(string[] args)

       {

           var logger = NLog.Web.NLogBuilder.ConfigureNLog("nlog.config").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.配置appsettings.json


{

 "Logging": {

   "IncludeScopes": false,

   "LogLevel": {

     "Default": "Trace",

     "Microsoft": "Warning",

     "Microsoft.Hosting.Lifetime": "Information"

   }

 },

 "AllowedHosts": "*"

}


  


6.写日志


public class HomeController : Controller

   {

       private readonly ILogger<HomeController> _logger;


       public HomeController(ILogger<HomeController> logger)

       {

           _logger = logger;

           _logger.LogDebug(1, "NLog injected into HomeController");

       }


       public IActionResult Index()

       {

           _logger.LogInformation("Hello, this is the index!");

           return View();

       }


       public IActionResult Privacy()

       {

           return View();

       }


       [ResponseCache(Duration = 0, Location = ResponseCacheLocation.None, NoStore = true)]

       public IActionResult Error()

       {

           return View(new ErrorViewModel { RequestId = Activity.Current?.Id ?? HttpContext.TraceIdentifier });

       }

   }


 


7.输出示例


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



2021-09-25 17:47:42.9103||DEBUG|TestNLog.Program|init main

2021-09-25 17:47:44.1057||INFO|Microsoft.Hosting.Lifetime|Application started. Press Ctrl+C to shut down.

2021-09-25 17:47:44.1193||INFO|Microsoft.Hosting.Lifetime|Hosting environment: Development

2021-09-25 17:47:44.1240||INFO|Microsoft.Hosting.Lifetime|Content root path: D:\test\TestNLog

2021-09-25 17:47:44.1850||INFO|TestNLog.Controllers.HomeController|Hello, this is the index!


   



2021-09-25 17:47:42.9103||DEBUG|TestNLog.Program|init main |url: |action:

2021-09-25 17:47:44.1850||INFO|TestNLog.Controllers.HomeController|Hello, this is the index! |url: http://localhost/|action: Index