我现在正在尝试让 NLog 在 .NET5 辅助服务模板中工作一段时间。但无论我尝试什么,都没有日志。不幸的是,网站、github 或谷歌都没有给我带来任何线索。
我使用
- .NET5 辅助服务模板
- NLog.Extensions.Logging 版本 1.7.4
只是为了确保,日志文件的目标目录是预先创建的。
使用的appsettings.json:
{
"NLog": {
"throwConfigExceptions": true,
"targets": {
"async": true,
"logfile": {
"type": "File",
"fileName": "c:/temp/nlog/nlog-${shortdate}.log"
},
"logconsole": {
"type": "Console"
}
},
"rules": [
{
"logger": "*",
"minLevel": "Info",
"writeTo": "logconsole"
},
{
"logger": "*",
"minLevel": "Debug",
"writeTo": "logfile"
}
]
},
"Logging": {
"LogLevel": {
"Default": "Information",
"Microsoft": "Warning",
"Microsoft.Hosting.Lifetime": "Information"
}
}
}
设置的完整代码(仍然是基本模板),但必须缺少一些内容:
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Hosting;
using Microsoft.Extensions.Logging;
using NLog.Extensions.Logging;
using System;
using System.Threading;
using System.Threading.Tasks;
namespace NLogSample
{
public class Worker : BackgroundService
{
private readonly ILogger<Worker> _logger;
public Worker(ILogger<Worker> logger)
{
_logger = logger;
}
protected override async Task ExecuteAsync(CancellationToken stoppingToken)
{
while (!stoppingToken.IsCancellationRequested)
{
_logger.LogInformation("Worker running at: {time}", DateTimeOffset.Now);
await Task.Delay(1000, stoppingToken);
}
}
}
public class Program
{
public static void Main(string[] args)
{
CreateHostBuilder(args).Build().Run();
}
public static IHostBuilder CreateHostBuilder(string[] args) =>
Host.CreateDefaultBuilder(args)
.ConfigureLogging((hostContext, logging) =>
{
// ensure just use NLog
logging.Services.Clear();
logging.SetMinimumLevel(LogLevel.Trace);
//logging.AddNLog(hostContext.Configuration);
logging.AddNLog(hostContext.Configuration.GetSection("NLog"));
})
.ConfigureServices((hostContext, services) =>
{
services.AddHostedService<Worker>();
})
//.UseNLog()
;
}
}
最佳答案
尝试指定 LoggingConfigurationSectionName = "NLog"
并将 logging.Services.Clear()
替换为 logging.ClearProviders()
。像这样:
public static IHostBuilder CreateHostBuilder(string[] args) =>
Host.CreateDefaultBuilder(args)
.ConfigureLogging((hostContext, logging) =>
{
// ensure just use NLog
logging.ClearProviders();
logging.SetMinimumLevel(LogLevel.Trace);
logging.AddNLog(hostContext.Configuration, new NLogProviderOptions() { LoggingConfigurationSectionName = "NLog" });
})
.ConfigureServices((hostContext, services) =>
{
services.AddHostedService<Worker>();
});
关于c# - .NET5辅助服务模板的NLog设置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/69594537/