【发布时间】:2019-02-15 18:28:48
【问题描述】:
我正在编写一个使用 Serilog 的 Web 服务。我在获取要写出的文件时遇到问题(但控制台日志记录有效)。我注意到根据this 和this pages 的解释,当.net core 2.0 发布时设置发生了变化。
但是,现在,我看不到 任何 日志记录(也许在过去,默认的 M$ 记录器实际上就是我所看到的)。
program.cs 的设置方式如下:
public class Program
{
public static IConfiguration Configuration { get; } = new ConfigurationBuilder()
.SetBasePath(Directory.GetCurrentDirectory())
.AddJsonFile("appsettings.json", optional: true, reloadOnChange: true)
.AddJsonFile($"appsettings.{Environment.GetEnvironmentVariable("ASPNETCORE_ENVIRONMENT")}.json", optional: true, reloadOnChange: true)
.AddEnvironmentVariables()
.AddUserSecrets<Startup>()
.Build();
public static int Main(string[] args)
{
Log.Logger = new LoggerConfiguration()
.ReadFrom.Configuration(Configuration.GetSection("Serilog"))
.CreateLogger();
try
{
Log.Information("Starting webhost...");
BuildWebHost(args).Run();
return 0;
}
catch (Exception ex)
{
Log.Fatal(ex, "Host terminated unexpectedly");
return 1;
}
finally
{
Log.CloseAndFlush();
}
}
public static IWebHost BuildWebHost(string[] args) =>
WebHost.CreateDefaultBuilder(args)
.UseStartup<Startup>()
.UseConfiguration(Configuration)
.UseSerilog()
.Build();
}
我的 appsettings.json 在根目录中有这个部分:
"Serilog": {
"Using" : ["Serilog.Sinks.Console", "Serilog.Sinks.File"],
"MinimumLevel": {
"Default": "Debug",
"Override": {
"Microsoft": "Warning",
"System": "Warning"
},
"Enrich" : ["FromLogContext"],
"WriteTo": [
{"Name": "Console" },
{"Name": "Debug" },
{"Name": "File", "Args": {"path": "%LogDir%\\sampleapp\\log-{Date}.txt", "rollingInterval": "Day", "shared": true } }
]
},
"Properties": {
"Application": "sampleapp"
}
},
请注意,%LogDir% 是我机器上的一个环境变量,在其他应用程序中可以正常解析。路径已创建,并且 Logs 文件夹对此应用使用的凭据具有完整的 RW 权限。
我这样称呼日志记录...
private readonly ILogger<PartnerController> _logger;
private readonly IPartnerDao _partnerDao;
public PartnerController(ILogger<PartnerController> logger, IPartnerDao partnerDao)
{
_logger = logger;
_partnerDao = partnerDao;
}
[HttpGet]
[Route("{titleCode}")]
public async Task<IActionResult> Get(string titleCode)
{
_logger.LogInformation("Test logging");
}
然而,不知何故,ASP.NET Core Web Server 窗口中什么都没有显示,并且在我的机器上运行服务时没有创建文件。
我是否遗漏了一些明显的东西?
【问题讨论】:
-
你看过这篇文章github.com/serilog/serilog-settings-configuration是否安装了所有必需的包?
-
是的,Serilog 有很多软件包要求,需要几次尝试才能正确。最近添加
Serilog.AspNetCore以迁移到 2.2 对我来说非常好。 -
由于 .Net Core 已更新到 2.2 InProcess 托管模型可能会导致登录文件时出现一些问题。检查stackoverflow.com/questions/53846333/…
标签: c# logging .net-core serilog