public class Program
{
public static void Main(string[] args)
{
CreateWebHostBuilder(args).Build().Run();
}
public static IWebHostBuilder CreateWebHostBuilder(string[] args) =>
WebHost.CreateDefaultBuilder(args)
.UseSerilog((ctx, config) => { config.ReadFrom.Configuration(ctx.Configuration); })
.UseStartup<Startup>();
}
public class Startup
{
public IContainer Container { get; private set; }
public Startup(IConfiguration configuration)
{
Log.Warning("test");
Configuration = configuration;
}
}
appsettings.json
{
"Serilog": {
"MinimumLevel": {
"Default": "Information",
"Override": {
"Default": "Information",
"Microsoft": "Information",
"System": "Information"
}
},
"WriteTo": [
{
"Name": "RollingFile",
"Args": {
"pathFormat": "C:\\test.txt",
"outputTemplate": "{Timestamp:yyyy-MM-dd HH:mm:ss.ffff}|{TenantName}|{RequestId}|{SourceContext}|{Level:u3}|{Message:lj}{NewLine}{Exception}",
"restrictedToMinimumLevel": "Information"
}
}
]
},
"AllowedHosts": "*"
}
すべてのパッケージがインストールされています
あなたの設定はRollingFile
用ですが、パッケージリストにはSerilog.Sinks.File
と書かれています。これらは異なります。 Serilog.Sinks.RollingFile
パッケージを追加する必要があり、動作を開始するはずです。
File
シンク(コメントで@Kirkが言及したように、現在推奨されているオプション)を使用する場合は、設定を次のように変更する必要があります。
"WriteTo": [
{
"Name": "File",
"Args": {
"path": "C:\\test.txt",
"outputTemplate": "{Timestamp:yyyy-MM-dd HH:mm:ss.ffff}|{TenantName}|{RequestId}|{SourceContext}|{Level:u3}|{Message:lj}{NewLine}{Exception}",
"restrictedToMinimumLevel": "Information"
}
}
[〜#〜] note [〜#〜]
pathFormat
は、path
シンクのFile
でなければなりません
Serilog File Sink Documentation を参照してください
問題はc:に直接書き込みを行っていたようで、設定でFileを使用していないようです。
これに遭遇した人のための最終的な解決策があります
Program.cs
public class Program
{
public static void Main(string[] args)
{
CreateWebHostBuilder(args).Build().Run();
}
public static IWebHostBuilder CreateWebHostBuilder(string[] args) =>
WebHost.CreateDefaultBuilder(args)
.UseStartup<Startup>()
.UseSerilog();
}
Startup.cs
public Startup(IConfiguration configuration)
{
var logConfiguration = new LoggerConfiguration()
.ReadFrom.Configuration(configuration);
Log.Logger = logConfiguration.CreateLogger();
Configuration = configuration;
}
appsettings.json
"Serilog": {
"WriteTo": [
{
"Name": "File",
"Args": {
"path": "C:\\temp\\log.txt",
"rollingInterval": "Day"
}
}
]
}
これは答えではなく、観察です。ここで明確な問題を観察しました。 3つの設定ファイルがあります。
launchSettings.jsonからプロファイルを選択し、次のように環境がVivekDevになるようにしました。
"ASPNETCORE_ENVIRONMENT": "VivekDev"
appsettings.VivekDev.jsonに次の設定があり、appsettings.jsonにSerilog設定がない場合、問題なく動作します。
"Serilog": {
"WriteTo": [
{
"Name": "File",
"Args": {
"path": "log.txt",
"rollingInterval": "Day"
}
}
]
},
しかし、私が持っているとき
"Serilog": {
"WriteTo": [ "Debug" ]
},
appsettings.jsonの場合、これはappsettings.VivekDev.jsonの設定を何らかの理由で上書きします。私の理解では、これは正しくなく、appsettings.VivekDev.json内の設定はappsettings.jsonをオーバーライドする必要があります。
これは、ファイルシンクの場合にのみ発生します。コンソールなどの他のシンクを使用している場合、期待どおりに動作します。 appsettings.VivekDev.json内のserilog設定は、appsettings.jsonのserilog設定を正しくオーバーライドしています。
ここでは間違いなくバグがあります。
そのため、今ではappsettings.jsonのserilog設定を削除し、appsettings.VivekDev.jsonのserilogファイルへの書き込み設定を保持しています。