下面的 LoggerConfiguration() 初始化代码适用于 .net core 3 控制台应用程序的 Main(),但不适用于辅助服务。使用控制台应用程序,“logs”文件夹和 log.txt 是在运行时创建的。运行服务时未创建该文件夹,因此我尝试了多个文件路径(“c:\log.txt”、“..\log.txt”、“..\..\log.txt”),但没有一个被创造。调试控制台中显示日志记录,但未创建 log.txt 文件。没有抛出错误,VS 2019 正在以管理员身份运行。
引用包:
<PackageReference Include="Serilog" Version="2.9.0" />
<PackageReference Include="Serilog.Sinks.Console" Version="3.1.1" />
<PackageReference Include="Serilog.Sinks.File" Version="4.1.0" />
程序.cs:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Hosting;
using Serilog;
namespace WorkerService1
{
public class Program
{
public static void Main(string[] args)
{
Log.Logger = new LoggerConfiguration()
.MinimumLevel.Debug()
.WriteTo.Console()
.WriteTo.File("logs\\log.txt", rollingInterval: RollingInterval.Day)
.CreateLogger();
CreateHostBuilder(args).Build().Run();
}
public static IHostBuilder CreateHostBuilder(string[] args) =>
Host.CreateDefaultBuilder(args)
.ConfigureServices((hostContext, services) =>
{
services.AddHostedService<Worker>();
});
}
}
Worker.cs:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading;
using System.Threading.Tasks;
using Microsoft.Extensions.Hosting;
using Microsoft.Extensions.Logging;
namespace WorkerService1
{
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);
}
}
}
}
最佳答案
我成为了同一个奇怪名称的 NuGet 包的受害者。您需要添加 Serilog.AspNetCore,即使它是一个控制台应用程序。欲了解更多信息,请参阅这篇文章:https://www.blinkingcaret.com/2018/02/14/net-core-console-logging/
关于c# - Serilog WriteTo.File() 在控制台应用程序中有效,但在 .net Core 3 Worker Service 中无效,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59397633/