Ser*_*kov 3 file serilog .net-core ilogger
ASP.NET CORE 3.1 Worker Service Application.
Packages
"Microsoft.EntityFrameworkCore.Design" Version="3.1.3"
PackageReference Include="Microsoft.Extensions.Hosting" Version="3.1.3"
PackageReference Include="Microsoft.Extensions.Hosting.WindowsServices" Version="3.1.3"
PackageReference Include="Serilog.AspNetCore" Version="3.2.0"
PackageReference Include="Serilog.Extensions.Hosting" Version="3.0.0"
Run Code Online (Sandbox Code Playgroud)
Serilog 使用硬编码的 LoggerConfiguration 写入文件,但无法从从 appsettings.json 加载的配置中工作
这是应用程序代码
public static class Program
{
public static IConfigurationRoot Configuration { get; set; }
private static string _environmentName;
public static void Main(string[] args)
{
var hostBuilder = CreateHostBuilder(args).Build();
//Log.Logger = (Configuration["Logging:LogLevel:Default"] == "Debug")?
// new LoggerConfiguration()
// .MinimumLevel.Debug()
// .WriteTo.Console()
// .WriteTo.File(path: Path.Combine("C:/LogFiles", "OA-EmailService-.log"),
// rollingInterval: RollingInterval.Day, shared: true, flushToDiskInterval: TimeSpan.FromSeconds(10))
// .CreateLogger()
// :
// new LoggerConfiguration()
// .WriteTo.Console()
// .WriteTo.File(path: Path.Combine("C:/LogFiles", "OA-EmailService-.log"),
// rollingInterval: RollingInterval.Day, shared: true, flushToDiskInterval: TimeSpan.FromSeconds(10))
// .CreateLogger()
// ;
Log.Logger = new LoggerConfiguration()
.ReadFrom.Configuration(Configuration)
.CreateLogger();
try
{
Log.Information("APP:App started");
hostBuilder.Run();
}
catch (Exception ex)
{
Log.Fatal(ex, "APP:App startup failed");
}
finally
{
Log.CloseAndFlush();
}
}
public static IHostBuilder CreateHostBuilder(string[] args) =>
Host.CreateDefaultBuilder(args)
.ConfigureLogging((hostingContext, config) =>
{
config.ClearProviders(); //Disabling default integrated logger
_environmentName = hostingContext.HostingEnvironment.EnvironmentName;
})
.ConfigureAppConfiguration((hostingContext, config) =>
{
Configuration = new ConfigurationBuilder()
.SetBasePath(hostingContext.HostingEnvironment.ContentRootPath)
.AddJsonFile("appsettings.json", optional: false, reloadOnChange: true)
//.AddJsonFile($"appsettings.{hostingContext.HostingEnvironment.EnvironmentName}.json",
// optional: false,
// reloadOnChange: true)
.AddEnvironmentVariables()
.Build();
})
.UseSerilog()
.UseWindowsService()
.ConfigureServices((hostContext, services) => { services.AddHostedService<Worker>(); });
}
Run Code Online (Sandbox Code Playgroud)
这是appsettings.json
{
"Serilog": {
"MinimumLevel": "Debug",
"WriteTo": [
{
"Name": "Console",
"Args": {
"outputTemplate": "===> {Timestamp:HH:mm:ss.fff zzz} [{Level}] {Message}{NewLine}{Exception}"
}
},
{
"Name": "RollingFile",
"Args": {
"pathFormat": "C:/LogFiles/OA-EmailService-.log",
"outputTemplate": "===> {Timestamp:yyyy-MM-dd HH:mm:ss.fff zzz} [{Level}] {Message}{NewLine}{Exception}"
}
}
]
}
}
Run Code Online (Sandbox Code Playgroud)
有趣的是,控制台接收器的部分运行良好,只是文件有问题。如何强制serilog写入文件?
1) 您是否安装了合适的水槽套件?您在https://github.com/serilog/serilog-sinks-rollingfile / https://www.nuget.org/packages/Serilog.Sinks.RollingFile/显示(已弃用的)滚动文件接收器的参数,必须主动安装才能运行 appsettings 值。
首选包的语法Serilog.Sinks.File
如下:
"Serilog": {
"WriteTo": [
{
"Name": "File",
"Args": {
"path": ".\\yourpath\\yourfile.txt",
"rollingInterval": "Day"
}
}
]
}
Run Code Online (Sandbox Code Playgroud)
2) 您指定的文件夹是否存在并且可执行文件是否有权写入该文件夹?如果文件系统不允许尝试写入文件夹路径,则可能会默默失败。
归档时间: |
|
查看次数: |
15524 次 |
最近记录: |