【发布时间】:2020-02-13 15:44:57
【问题描述】:
我在 .NET Core 3.1 Worker Service 项目中记录调试级别消息时遇到问题。我的文件目标或控制台都没有记录调试级别的消息。信息级事件按预期写入。我已经查看了older question with the same title 以确保所有这些框都被选中。
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"
xsi:schemaLocation="http://www.nlog-project.org/schemas/NLog.xsd NLog.xsd"
autoReload="true"
throwExceptions="false"
internalLogLevel="Off" internalLogFile="%appdata%\FileTransferService\nlog-internal.log">
<variable name="logdir" value="${specialfolder:folder=ApplicationData}/FileTransferService"/>
<variable name="stdlayout" value="${longdate}|${level:uppercase=true}|${message:exceptionSeparator=|}${exception:format=ToString}"/>
<targets>
<target name="default" xsi:type="AsyncWrapper" overflowAction="Block">
<target name="defaultlog" xsi:type="File"
fileName="${logdir}/dftslog.txt"
layout="${stdlayout}"
archiveEvery="Month" concurrentWrites="false"/>
</target>
</targets>
<rules>
<logger name="*" minlevel="Debug" writeTo="default"/>
</rules>
</nlog>
appsettings.json
{
"Logging": {
"LogLevel": {
"Default": "Debug",
"Microsoft": "Warning",
"Microsoft.Hosting.Lifetime": "Information"
}
}
}
我尝试将 Microsoft 和 Microsoft.Hosting.Lifetime 都设置为 Debug,但没有效果。
Program.CreateHostBuilder 方法
public static IHostBuilder CreateHostBuilder(string[] args) =>
Host.CreateDefaultBuilder(args)
.UseWindowsService()
.ConfigureLogging((context, logBuilder) => {
logBuilder.ClearProviders();
logBuilder.AddConfiguration(context.Configuration.GetSection("Logging"));
logBuilder.SetMinimumLevel(LogLevel.Debug);
logBuilder.AddConsole();
logBuilder.AddNLog();
})
.ConfigureServices((hostContext, services) => {
services.AddHostedService<Worker>();
services.AddTransient(typeof(ITransferService), typeof(TransferService));
});
以下是一些附加说明:
- 我尝试调用 SetMinimumLevel,但没有任何效果。
- NLog.config 设置为始终复制。
- 在没有 AddConsole 的情况下,我得到了相同的结果。这实际上是在我看到没有记录调试消息后添加的。
【问题讨论】:
-
此示例应用程序在记录调试和跟踪方面没有问题:github.com/NLog/NLog.Extensions.Logging/blob/master/examples/…
-
不幸的是,存储库的内容没有解决任何问题。我将在后续评论中详细介绍我尝试过的内容。
-
虽然存储库是针对 Rolf K. 提供的 .NET Core 2 的,但我认为它可能仍然有帮助。我马上注意到他能够在构建器中使用 UseNLog 而不是 AddNLog。原来是因为我添加了包 NLog.Extensions.Logging 而不是 NLog.Extensions.Hosting。我还简化了我的配置,所以它所做的只是调用 SetMinimumLevel。问题依然存在。接下来,我完全删除了 appsettings.json 的内容。那也没有解决问题。我还在 finally 块中添加了对 LogManager.Shutdown 的调用,但我没想到这很重要。
-
您可以在这里创建一个新问题github.com/NLog/NLog.Extensions.Logging/issues/new 并附上您无法登录的示例应用程序的源代码
-
也许解决方案就在这个答案中?stackoverflow.com/a/59777331/201303