Serilogの設定ファイル（デスクトップアプリケーション向け）JSON版


# はじめに

Serilogの設定ファイルを備忘のため残します。
デスクトップアプリケーション向けの設定内容です。

ログレベル別に2種類（全レベル/Warning以上）× 出力形式別に2種類（通常のテキスト形式/JSON形式）
で合計4ファイルを出力する内容となっています。
各設定項目の意味は、コメントとして記載しています。

## Nugetパッケージ

インストールしたSerilog関連のNugetパッケージは以下の通りです。

* Serilog
* Serilog.Enrichers.AssemblyName
* Serilog.Enrichers.Environment
* Serilog.Enrichers.Memory
* Serilog.Enrichers.Process
* Serilog.Enrichers.Thread
* Serilog.Exceptions
* Serilog.Filters.Expressions
    - 非推奨のパッケージ。.NET Core 以上であれば Serilog.Expressions
* Serilog.Formatting.Compact
* Serilog.Settings.Configuration
* Serilog.Sinks.File

# 設定ファイル（.json）

```csharp
{
  "Serilog": {
    "Using": [ "Serilog.Sinks.File" ], //ファイルに出力
    "MinimumLevel": {
      //最小ログレベル
      "Default": "Verbose"
    },
    "Enrich": [
      //拡張
      "WithThreadId", //スレッドID
      "WithThreadName", //スレッド名
      "WithMachineName", //マシン名
      "WithEnvironmentUserName", //ユーザー名
      "WithProcessId", //プロセスID
      "WithProcessName", //プロセス名
      "WithAssemblyName", //アセンブリ名
      "WithAssemblyVersion", //アセンブリバージョン
      "WithMemoryUsage", //メモリ使用量
      "WithExceptionDetails" //例外の詳細情報
    ],
    "WriteTo": [
      {
        //通常のテキスト形式で、全レベルのログを出力するためのLogger
        "Name": "Logger",
        "Args": {
          "configureLogger": {
            "WriteTo": [
              {
                "Name": "File",
                "Args": {
                  //ログファイルパス
                  "path": "Logs/All/Default/all.log",
                  //ログファイルのフォーマット
                  "outputTemplate": "{Timestamp:yyyy-MM-dd HH:mm:ss} | [{Level:u3}] | {ThreadId:00}:{ThreadName} | {ProcessId:00}:{ProcessName} | {Message:lj} | {AssemblyName} | {AssemblyVersion} | {MachineName} | {EnvironmentUserName} | {MemoryUsage} B | {NewLine}{Exception}",
                  //1日毎にロールする
                  "rollingInterval": "Day",
                  //直近の7ファイルを保持する（デフォルトでは直近の31ファイル）
                  "retainedFileCountLimit": 7,
                  //ファイルサイズの制限を削除（デフォルトでは1GB）
                  "fileSizeLimitBytes": null,
                  //書き込みをバッファリングする
                  "buffered": true
                }
              }
            ]
          }
        }
      },
      {
        //JSON形式で、全レベルの構造化ログを出力するためのLogger
        "Name": "Logger",
        "Args": {
          "configureLogger": {
            "WriteTo": [
              {
                "Name": "File",
                "Args": {
                  "path": "Logs/All/Compact/all_compact.json",
                  //JsonFormatter
                  "formatter": "Serilog.Formatting.Compact.CompactJsonFormatter, Serilog.Formatting.Compact",
                  "rollingInterval": "Day",
                  "retainedFileCountLimit": 7,
                  "fileSizeLimitBytes": null,
                  "buffered": true
                }
              }
            ]
          }
        }
      },
      {
        //通常のテキスト形式で、Warning以上のログを出力するためのLogger
        "Name": "Logger",
        "Args": {
          "configureLogger": {
            "Filter": [
              {
                "Name": "ByIncludingOnly",
                "Args": {
                  "expression": "(@Level = 'Error' or @Level = 'Fatal' or @Level = 'Warning')"
                }
              }
            ],
            "WriteTo": [
              {
                "Name": "File",
                "Args": {
                  "path": "Logs/Error/Default/error.log",
                  "outputTemplate": "{Timestamp:yyyy-MM-dd HH:mm:ss} | [{Level:u3}] | {ThreadId:00}:{ThreadName} | {ProcessId:00}:{ProcessName} | {Message:lj} | {AssemblyName} | {AssemblyVersion} | {MachineName} | {EnvironmentUserName} | {MemoryUsage} B | {NewLine}{Exception}",
                  "rollingInterval": "Day",
                  "retainedFileCountLimit": 7,
                  "fileSizeLimitBytes": null,
                  "buffered": true
                }
              }
            ]
          }
        }
      },
      {
        //JSON形式で、Warning以上の構造化ログを出力するためのLogger
        "Name": "Logger",
        "Args": {
          "configureLogger": {
            "Filter": [
              {
                "Name": "ByIncludingOnly",
                "Args": {
                  "expression": "(@Level = 'Error' or @Level = 'Fatal' or @Level = 'Warning')"
                }
              }
            ],
            "WriteTo": [
              {
                "Name": "File",
                "Args": {
                  "path": "Logs/Error/Compact/error_compact.json",
                  "formatter": "Serilog.Formatting.Compact.CompactJsonFormatter, Serilog.Formatting.Compact",
                  "rollingInterval": "Day",
                  "retainedFileCountLimit": 7,
                  "fileSizeLimitBytes": null,
                  "buffered": true
                }
              }
            ]
          }
        }
      }
    ]
  }
}
```