为什么我不能使用 nlog 将日志跟踪写入文件?
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) 之后,我在控制器中创建私有字段 class
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 INFO Executing action method AppStore.Web.Controllers.UserController.AddAsync (AppStore.Web) - Validation state: Valid
Blockquote
2019-08-20 19:52:22.2795 WARN LOG WARNING HELLOOOO
2019-08-20 19:52:22.2817 INFO Executed action method
AppStore.Web.Controllers.UserController.AddAsync (AppStore.Web),
returned result Microsoft.AspNetCore.Mvc.NotFoundObjectResult in
373.2219ms.
为什么看不到trace信息,是我配置有问题还是需要做其他实现。我测试了 log -error、info、warn、fatal 但只有 trace 没有保存在我的文件中。
如Configure appsettings.json表示:
The Logging configuration specified in appsettings.json overrides any
call to SetMinimumLevel. So either remove "Default": or adjust it
correctly to your needs.
{
"Logging": {
"LogLevel": {
"Default": "Trace",
"Microsoft": "Information"
}
}
}
Remember to also update any environment specific configuration to
avoid any surprises. Ex appsettings.Development.json
您需要更改 appsettings.json
和 appsettings.Development.json
中的 Logging
部分。
对于appsettings.Development.json
,您可以勾选appsettings.json
或打开项目文件夹进行查找和编辑。
我开始学习如何在 .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) 之后,我在控制器中创建私有字段 class
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 INFO Executing action method AppStore.Web.Controllers.UserController.AddAsync (AppStore.Web) - Validation state: Valid Blockquote
2019-08-20 19:52:22.2795 WARN LOG WARNING HELLOOOO
2019-08-20 19:52:22.2817 INFO Executed action method AppStore.Web.Controllers.UserController.AddAsync (AppStore.Web), returned result Microsoft.AspNetCore.Mvc.NotFoundObjectResult in 373.2219ms.
为什么看不到trace信息,是我配置有问题还是需要做其他实现。我测试了 log -error、info、warn、fatal 但只有 trace 没有保存在我的文件中。
如Configure appsettings.json表示:
The Logging configuration specified in appsettings.json overrides any call to SetMinimumLevel. So either remove "Default": or adjust it correctly to your needs.
{
"Logging": {
"LogLevel": {
"Default": "Trace",
"Microsoft": "Information"
}
}
}
Remember to also update any environment specific configuration to avoid any surprises. Ex appsettings.Development.json
您需要更改 appsettings.json
和 appsettings.Development.json
中的 Logging
部分。
对于appsettings.Development.json
,您可以勾选appsettings.json
或打开项目文件夹进行查找和编辑。