使用NLog記錄日志
手動或使用NuGet在csproj中添加依賴項
- 安裝最新版本:
- NLog.Web.AspNetCore 4.9+
- 如有可能,更新NLog軟件包
創建nlog.config文件。
在項目的根目錄中創建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">
<!-- enable asp.net core layout renderers -->
<extensions>
<add assembly="NLog.Web.AspNetCore"/>
</extensions>
<!-- the targets to write to -->
<targets>
<!--寫入文件-->
<target
xsi:type="File"
name="DebugFile"
fileName="Logs\Debug\${shortdate}.log"
layout="日志時間:${longdate}${newline}日志來源:${callsite}${newline}日志級別:${uppercase:${level}}${newline}消息內容:${message}${newline}----------------------------------------------------------------${newline}" >
</target>
<target
xsi:type="File"
name="InfoFile"
fileName="Logs\Info\${shortdate}.log"
layout="日志時間:${longdate}${newline}日志來源:${callsite}${newline}日志級別:${uppercase:${level}}${newline}消息內容:${message}${newline}----------------------------------------------------------------${newline}" >
</target>
<target
xsi:type="File"
name="ErrorFile"
fileName="Logs\Error\${shortdate}.log"
layout="日志時間:${longdate}${newline}日志來源:${callsite}${newline}日志級別:${uppercase:${level}}${newline}消息內容:${message}${newline}異常信息:${exception:format=tostring}${newline}----------------------------------------------------------------${newline}" >
</target>
</targets>
<!-- rules to map from logger name to target -->
<rules>
<!--Skip non-critical Microsoft logs and so log only own logs-->
<logger name="Microsoft.*" maxlevel="Info" final="true" />
<logger name="*" minlevel="Debug" maxLevel="Debug" writeTo="DebugFile" />
<logger name="*" minlevel="Info" maxLevel="Info" writeTo="InfoFile" />
<logger name="*" minlevel="Error" maxLevel="Error" writeTo="ErrorFile" />
</rules>
</nlog>
==注意:日志生成的文件在bin目錄下==
配置文件的更多詳細信息在這里
請注意,如果刪除所有其他LoggingProviders(如控制臺)并且僅使用NLog,則可能必須特別注意Hosting Lifetime Startup Messages。因為這可能導致托管環境(Visual Studio / Docker / Azure容器)看不到啟動的應用程序。
啟用復制到bin文件夾
- .csproj手動編輯文件并添加:
<ItemGroup> <Content Update="nlog.config" CopyToOutputDirectory="PreserveNewest" /> </ItemGroup>
修改 program.cs
using System;
using NLog.Web;
using Microsoft.AspNetCore.Hosting;
using Microsoft.Extensions.Logging;
using Microsoft.Extensions.Hosting;
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
配置 appsettings.json
{
"Logging": {
"IncludeScopes": false,
"LogLevel": {
"Default": "Trace",
"Microsoft": "Warning",
"Microsoft.Hosting.Lifetime": "Information"
}
},
"AllowedHosts": "*"
}
==切記還要更新任何特定于環境的配置,以免引起任何意外。==
寫日志
using Microsoft.Extensions.Logging;
public class HomeController : Controller
{
private readonly ILogger<HomeController> _logger;
public HomeController(ILogger<HomeController> logger)
{
_logger = logger;
}
public IActionResult Index()
{
_logger.LogInformation("這是Info等級的信息");
return View();
}
}
輸出
日志時間:2020-08-20 16:56:24.3082
日志來源:QS.Core.Web.Areas.Admin.Controllers.HomeController.Index
日志級別:INFO
消息內容:這是Info等級的信息
----------------------------------------------------------------
==如果無法輸出日志文件請檢查appsettings.json文件或在bin目錄下查看==