Linux 运行 时 Serilog 未创建日志文件
Serilog not creating log file when running on Linux
当 运行 ASP.NET Core 应用程序在 Linux[=29 上时,我无法启用日志记录=].我正在使用 Serilog.Sinks.File(但也尝试使用 RollingFile),并在 appsettings 中定义了以下配置:
"Serilog": {
"Using": [ "Serilog.Sinks.File" ],
"MinimumLevel": {
"Default": "Debug",
"Override": {
"Microsoft": "Warning",
"System": "Warning"
}
},
"WriteTo": [
{
"Name": "File",
"Args": { "path": "core_log.log", "rollingInterval": "Day" }
}
],
"Enrich": [ "FromLogContext", "WithMachineName", "WithThreadId" ],
"Properties": {
"Application": "CORE service"
} }
我也尝试使用 pathFormat 与 RollingFile 接收器一起使用,但没有成功。无论我尝试什么,应用程序都没有创建日志文件。
我还尝试了多种路径变体,例如:/var/test/app/core_log.log 或只是 core_log.log,但我在任何地方都看不到文件。我尝试使用以下方式搜索它:
sudo find / -name '*.log' -print | grep core_log
值得一提的是,当 运行 在 Windows 上使用相同的应用程序时,一切正常,我可以看到创建的日志文件。
有人在 Linux 上遇到过类似的 Serilog 问题吗?会不会跟特权有关?
刚刚解决了此配置的相同问题:
public static IWebHostBuilder CreateWebHostBuilder(string[] args) =>
WebHost.CreateDefaultBuilder(args)
.ConfigureAppConfiguration((hostingContext, config) =>
{
Log.Logger = new LoggerConfiguration()
.WriteTo
.File(Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "logs/.log"), rollingInterval: RollingInterval.Day)
.CreateLogger();
})
.ConfigureLogging((hostingContext, logging) =>
{
logging.AddConfiguration(hostingContext.Configuration.GetSection("Logging"));
logging.AddSerilog(dispose: true);
})
.UseStartup<Startup>();
特别注意AppDomain.CurrentDomain.BaseDirectory
。这将指向您的 Linux 部署文件夹。我想也可以从配置文件中读取文件夹。
我还必须手动创建文件夹,正如 Nicholas 所指出的(谢谢!,不仅如此),但不是文件。
当 运行 ASP.NET Core 应用程序在 Linux[=29 上时,我无法启用日志记录=].我正在使用 Serilog.Sinks.File(但也尝试使用 RollingFile),并在 appsettings 中定义了以下配置:
"Serilog": {
"Using": [ "Serilog.Sinks.File" ],
"MinimumLevel": {
"Default": "Debug",
"Override": {
"Microsoft": "Warning",
"System": "Warning"
}
},
"WriteTo": [
{
"Name": "File",
"Args": { "path": "core_log.log", "rollingInterval": "Day" }
}
],
"Enrich": [ "FromLogContext", "WithMachineName", "WithThreadId" ],
"Properties": {
"Application": "CORE service"
} }
我也尝试使用 pathFormat 与 RollingFile 接收器一起使用,但没有成功。无论我尝试什么,应用程序都没有创建日志文件。
我还尝试了多种路径变体,例如:/var/test/app/core_log.log 或只是 core_log.log,但我在任何地方都看不到文件。我尝试使用以下方式搜索它:
sudo find / -name '*.log' -print | grep core_log
值得一提的是,当 运行 在 Windows 上使用相同的应用程序时,一切正常,我可以看到创建的日志文件。
有人在 Linux 上遇到过类似的 Serilog 问题吗?会不会跟特权有关?
刚刚解决了此配置的相同问题:
public static IWebHostBuilder CreateWebHostBuilder(string[] args) =>
WebHost.CreateDefaultBuilder(args)
.ConfigureAppConfiguration((hostingContext, config) =>
{
Log.Logger = new LoggerConfiguration()
.WriteTo
.File(Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "logs/.log"), rollingInterval: RollingInterval.Day)
.CreateLogger();
})
.ConfigureLogging((hostingContext, logging) =>
{
logging.AddConfiguration(hostingContext.Configuration.GetSection("Logging"));
logging.AddSerilog(dispose: true);
})
.UseStartup<Startup>();
特别注意AppDomain.CurrentDomain.BaseDirectory
。这将指向您的 Linux 部署文件夹。我想也可以从配置文件中读取文件夹。
我还必须手动创建文件夹,正如 Nicholas 所指出的(谢谢!,不仅如此),但不是文件。