[英]Why I can't write to log trace to file using nlog?
我開始學習如何在.net核心Web API應用程序中配置nlog。 並閱讀了一些教程,並嘗試從github的官方教程中實現實現
1)創建nlog.confiq
xml文件
<?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="Trace"
internalLogFile="D:/Projects/appstore2/AppStore/AppStore.DataAccessLayer/Logs/InnerLog.txt">
<extensions>
<!--enable NLog.Web for ASP.NET Core-->
<add assembly="NLog.Web.AspNetCore"/>
</extensions>
<variable name="PathToFile" value="D:/Projects/appstore2/AppStore/AppStore.DataAccessLayer/Logs"/>
<!-- define various log targets -->
<targets async="true">
<!-- write logs to file -->
<target name="logfile" xsi:type="File" fileName="D:/Projects/appstore2/AppStore/AppStore.DataAccessLayer/Logs/${shortdate}_log.txt" layout="${longdate} ${level:uppercase=true} ${message}"/>
</targets>
<rules>
<logger name="*" minlevel="Trace" writeTo="logfile" final="true"/>
</rules>
2)配置我的Programm.cs
public class Program
{
public static void Main(string[] args)
{
var logger = NLog.Web.NLogBuilder.ConfigureNLog("nlog.config").GetCurrentClassLogger();
try
{
logger.Debug("init main");
CreateWebHostBuilder(args).Build().Run();
}
catch (Exception ex)
{
//NLog: catch setup errors
logger.Fatal(ex, "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 IWebHostBuilder CreateWebHostBuilder(string[] args) =>
WebHost.CreateDefaultBuilder(args)
.UseStartup<Startup>()
.ConfigureLogging(logging =>
{
logging.ClearProviders();
})
.UseNLog();
}
3)更改json文件並添加以下代碼:
"Logging": {
"LogLevel": {
"Default": "Trace",
"Microsoft": "Information"
}
}
4)之后,我在控制器類中創建私有字段
private readonly ILogger<UserController> _logger;
public UserController(ILogger<UserController> logger)
{
_logger = logger;
}
並在try / catch中使用此記錄器
catch (Exception ex)
{
_logger.LogWarning(ex, "LOG WARNING HELLOOOO");
_logger.LogTrace(ex, "LOG TRACE HELLOOOO");
return StatusCode(500, ex.Message);
}
但是當我創建錯誤情況時,我的文件中沒有LogTrace
信息
2019-08-20 19:52:21.9065信息執行操作方法AppStore.Web.Controllers.UserController.AddAsync(AppStore.Web)-驗證狀態:有效Blockquote
2019-08-20 19:52:22.2795警告日志警告HELLOOOO
2019-08-20 19:52:22.2817信息執行的操作方法AppStore.Web.Controllers.UserController.AddAsync(AppStore.Web),返回結果Microsoft.AspNetCore.Mvc.NotFoundObjectResult在373.2219ms中。
為什么我看不到跟蹤信息,我在配置中做錯了什么或需要做其他實現。 我測試了log -error,info,warn,致命,但只有跟蹤沒有保存在我的文件中。
如Configure appsettings.json所示:
appsettings.json中指定的Logging配置將覆蓋對SetMinimumLevel的任何調用。 因此,請刪除“默認”:或根據您的需要進行正確調整。
{
"Logging": {
"LogLevel": {
"Default": "Trace",
"Microsoft": "Information"
}
}
}
切記還要更新任何特定於環境的配置,以免引起任何意外。 前appsettings.Development.json
您需要同時更改appsettings.json
和appsettings.Development.json
Logging
部分。
對於appsettings.Development.json
,您可以檢查appsettings.json
或打開項目文件夾以查找和編輯它。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.