Serilogをログに正常に使用する.NET Core 2.0アプリケーションがあります。今、私はいくつかのデータベースパフォーマンス統計を別のシンクに記録したいと思います(これらはデバッグのためではなく、これは基本的にアプリケーションの他のすべてのログの目的であるため、それらを別々に保ちたい) Log.ForContext<MyClass>()
を使用してDB統計ロガーを作成します。
Serilogの設定方法がわからないappsettings.jsonを使用「デバッグログ」を1つのシンクに、DB統計ログを別のシンクに記録しますか?私は次のようなことができることを望んでいます:
"Serilog": {
"WriteTo": [
{
"Name": "RollingFile",
"pathFormat": "logs/Log-{Date}.log",
"Filter": {
"ByExcluding": "FromSource(MyClass)"
}
},
{
"Name": "RollingFile",
"pathFormat": "logs/DBStat-{Date}.log",
"Filter": {
"ByIncludingOnly": "FromSource(MyClass)"
}
}
]
}
構成の"Filter"
部分は、私の側では単なる当て推量です。これは構成ファイラーを使用して可能ですか、またはStartup.cs
ファイルのコードでこれを行う必要がありますか?
編集:C#APIを使用して動作していますが、JSON設定を使用してそれを把握したいです:
Log.Logger = new LoggerConfiguration()
.WriteTo.Logger(lc => lc
.Filter.ByExcluding(Matching.FromSource<MyClass>())
.WriteTo.LiterateConsole())
.WriteTo.Logger(lc => lc
.Filter.ByExcluding(Matching.FromSource<MyClass>())
.WriteTo.RollingFile("logs/DebugLog-{Date}.log"))
.WriteTo.Logger(lc => lc
.Filter.ByIncludingOnly(Matching.FromSource<MyClass>())
.WriteTo.RollingFile("logs/DBStats-{Date}.log", outputTemplate: "{Message}{NewLine}"))
.CreateLogger();
今日、この作業を完了し、これを整理するためにかなりの数の投稿、問題、およびその他のページを処理する必要があるため、適切な回答を提供すると思いました。
すべてのログを保持しておくと便利ですが、APIコードのみを個別にログに記録し、Microsoft.
名前空間ログを省略したいと考えました。そのためのJSON構成は次のようになります。
"Serilog": {
"Using": [ "Serilog.Sinks.File" ],
"MinimumLevel": "Debug",
"WriteTo": [
{
"Name": "File",
"Args": {
"path": "/var/logs/system.log",
... //other unrelated file config
}
},
{
"Name": "Logger",
"Args": {
"configureLogger": {
"WriteTo": [
{
"Name": "File",
"Args": {
"path": "/var/logs/api.log",
... //other unrelated file config
}
}
],
"Filter": [
{
"Name": "ByExcluding",
"Args": {
"expression": "StartsWith(SourceContext, 'Microsoft.')"
}
}
]
}
}
}
],
"Enrich": [ "FromLogContext", "WithMachineName", "WithThreadId" ]
... //Destructure and other config
}
最上位のWriteTo
は、最初の単純なグローバルシンクです。すべてのログイベントがこれに書き込みます。これと同じレベルにFilter
セクションを追加すると、構成されているすべてのWriteTo
要素に影響します。
次に、別のWriteTo
をLogger
(File
ではなく)として構成しますが、これのArgs
は異なって見え、configureLogger
要素がありますこれは、最上位のSerilog
と同じ目的を果たします。つまり、サブロガーの最上位です。これは、この構成を簡単に別のファイルに分割し、構成ビルダーに追加できることを意味します(下を参照)。
ここから、このサブロガーは同じように機能します。複数のWriteTo
sを構成でき、このレベルのFilter
要素はこのサブロガーのみに影響します。
単に"Name": "Logger"
要素をトップレベルWriteTo
セクションに追加し、各要素のフィルターを個別に設定するだけです。
注 configでこれをすべて実行し、コード内のSerilog.Filters.Expressions
パッケージの1ビットを参照しない場合でも、NuGetを追加する必要があることに注意することも重要です。そのパッケージへの参照。 パッケージ参照なしでは機能しません。
設定の分割について:
ロガーをさらに追加する必要がある場合は、明確にするために、異なるロガーを明確に別々のファイルに分割します。
appsettings.json:
"Serilog": {
"Using": [ "Serilog.Sinks.File" ],
"MinimumLevel": "Error",
"WriteTo": [
{
"Name": "File",
"Args": {
"path": "/var/logs/system.log",
...
}
},
{
"Name": "Logger",
"Args": {
"configureLogger": {} // leave this empty
}
}
],
"Enrich": [ "FromLogContext", "WithMachineName", "WithThreadId" ],
...
apilogger.json:
{
"Serilog:WriteTo:1:Args:configureLogger": { //notice this key
"WriteTo": [
{
"Name": "File",
"Args": {
"path": "/var/logs/api_separateFile.log",
...
}
}
],
"Filter": [
{
"Name": "ByExcluding",
"Args": {
"expression": "StartsWith(SourceContext, 'Microsoft.')"
}
}
]
}
}
IWebHost
ビルダーを調整して、追加の構成を含めます。
WebHost.CreateDefaultBuilder(args)
.ConfigureAppConfiguration((hostingContext, config) =>
{
config.AddJsonFile("apilogger.json", optional: false, reloadOnChange: false);
})
.UseStartup<Startup>();
これにより、理解、読み取り、および保守が容易になります。