|
Nlog是.NET几大成熟的日志框架,可以配置写入到文件,也可以配置写入到数据库,从.net framework开始就比较成熟了。到了.NET Core时代,NLog也紧跟时代,现在已经更新到5.0版本。本文将讲述NLog在.NET6下的简单使用。
一、环境准备
新建一个.NET6的MVC项目,并在nuget添加NLog包,由于是http://asp.net mvc项目需要如下包NLog.Web.AspNetCore。安装命令如下:
install-package NLog.Web.AspNetCore
二、添加项目配置文件nlog.config
点击项目右键添加nlog.config文件,然后复制下面的Xml内容
<?xml version=&#34;1.0&#34; encoding=&#34;utf-8&#34; ?><nlog xmlns=&#34;http://www.nlog-project.org/schemas/NLog.xsd&#34; xmlns:xsi=&#34;http://www.w3.org/2001/XMLSchema-instance&#34; autoReload=&#34;true&#34; internalLogLevel=&#34;Info&#34; internalLogFile=&#34;c:\temp\internal-nlog-AspNetCore.txt&#34;> <!-- enable asp.net core layout renderers --> <extensions> <add assembly=&#34;NLog.Web.AspNetCore&#34;/> </extensions> <!-- the targets to write to --> <targets> <!--配置文件位置,配置为项目生成目录,单个文件过大会导致写入效率下降,可配置单个文件的最大容量--> <target name=&#34;File&#34; xsi:type=&#34;AsyncWrapper&#34; queueLimit=&#34;5000&#34; overflowAction=&#34;Discard&#34;> <target xsi:type=&#34;File&#34; fileName=&#34;${basedir}/logs/${shortdate}.log&#34; layout=&#34;${date:yyyy-MM-dd HH\:mm\:ss} ${level:uppercase=true} ${event-context:item=Action} ${message} ${event-context:item=Amount} ${stacktrace}&#34; archiveAboveSize=&#34;10240&#34; archiveEvery=&#34;Day&#34; /> </target> <!--配置文件位置,下面是默认的配置,存放的位置为C盘--> <!-- File Target for all log messages with basic details --> <!--<target xsi:type=&#34;File&#34; name=&#34;allfile&#34; fileName=&#34;c:\temp\nlog-AspNetCore-all-${shortdate}.log&#34; layout=&#34;${longdate}|${event-properties:item=EventId:whenEmpty=0}|${level:uppercase=true}|${logger}|${message} ${exception:format=tostring}&#34; /> --><!-- File Target for own log messages with extra web details using some ASP.NET core renderers --><!-- <target xsi:type=&#34;File&#34; name=&#34;ownFile-web&#34; fileName=&#34;c:\temp\nlog-AspNetCore-own-${shortdate}.log&#34; layout=&#34;${longdate}|${event-properties:item=EventId:whenEmpty=0}|${level:uppercase=true}|${logger}|${message} ${exception:format=tostring}|url: ${aspnet-request-url}|action: ${aspnet-mvc-action}|${callsite}&#34; /> --><!--Console Target for hosting lifetime messages to improve Docker / Visual Studio startup detection --><!-- <target xsi:type=&#34;Console&#34; name=&#34;lifetimeConsole&#34; layout=&#34;${MicrosoftConsoleLayout}&#34; />--> </targets> <!-- 配置日志级别 --> <rules> <logger name=&#34;*&#34; minlevel=&#34;Debug&#34; maxlevel=&#34;Error&#34; writeTo=&#34;File&#34; /> <!-- 下面是默认的配置--> <!--All logs, including from Microsoft--><!--<loggername=&#34;*&#34;minlevel=&#34;Trace&#34;writeTo=&#34;allfile&#34;/> --><!--Output hosting lifetime messages to console target for faster startup detection --><!-- <logger name=&#34;Microsoft.Hosting.Lifetime&#34; minlevel=&#34;Info&#34; writeTo=&#34;lifetimeConsole, ownFile-web&#34; final=&#34;true&#34; /> --><!--Skip non-critical Microsoft logs and so log only own logs (BlackHole) --><!-- <logger name=&#34;Microsoft.*&#34; maxlevel=&#34;Info&#34; final=&#34;true&#34; /><loggername=&#34;System.Net.Http.*&#34;maxlevel=&#34;Info&#34;final=&#34;true&#34;/> <logger name=&#34;*&#34; minlevel=&#34;Trace&#34; writeTo=&#34;ownFile-web&#34; />--> </rules></nlog>layout是配置日期等布局格式。
rules节点是配置日志的级别,跟微软默认的日志级别类似。如果使用appsettings.json的日志级别需要配置RemoveLoggerFactoryFilter = false

三、在Program.cs添加Nlog组件
using NLog;using NLog.Web;var logger = NLog.LogManager.Setup().LoadConfigurationFromAppSettings().GetCurrentClassLogger();logger.Debug(&#34;init main&#34;);try{var builder = WebApplication.CreateBuilder(args);// Add services to the container.builder.Services.AddControllersWithViews();// NLog:注册Nlog组件builder.Logging.ClearProviders();builder.Host.UseNLog();var app = builder.Build();// Configure the HTTP request pipeline.if (!app.Environment.IsDevelopment()){ app.UseExceptionHandler(&#34;/Home/Error&#34;);}app.UseStaticFiles();app.UseRouting();app.UseAuthorization();app.MapControllerRoute( name: &#34;default&#34;, pattern: &#34;{controller=Home}/{action=Index}/{id?}&#34;);app.Run();}catch (Exception exception){ // NLog: 抓取全局错误 logger.Error(exception, &#34;Stopped program because of exception&#34;); throw;}finally{ // 确保在跑出异常停止线程 (避免在linux中报错) NLog.LogManager.Shutdown();}四、日志使用
配置完成就可以使用Nlog了,跟默认的日志注入一样,代码如下:
private readonly ILogger<HomeController> _logger; public HomeController(ILogger<HomeController> logger) { _logger = logger; } public IActionResult Index() { _logger.LogInformation(&#34;Hello,这是主页面!&#34;); return View(); }五、查看日志
以上工作完成后就可以在生成环境里logs里的日志文件了。

篇幅有限具体说明请看官方文档
https://github.com/NLog/NLog
源码链接:
https://pan.baidu.com/s/1T8HU06y4C1JxzRty5AAHEg?pwd=0qae
<hr/>关注公众号:DotNet开发跳槽觉得不错,请点个在看呀 |
|