.NET Core 3のログ出力を単一行にしてANSIカラーを止める方法

.NET Core 3.x プロジェクトで、特に Program.cs になにか書いてなければロギングの設定は、 appsettings.json (環境の違いで appsettings.Development.json なども同じ意味で含む) が参照されている。

かつ、デフォルトの設定では、特に記載はないが、以下の点でなかなかつらい。

  • ANSIエスケープシーケンスによるカラーリングが辛い。コンソールで見てる分にはいいのだが…
  • 複数行ロギングがどうにも見づらい。このへんは趣味の問題だが、単一行にしたい…

ということで、このあたりを appsettings.json で設定する。

appsettings.json の設定箇所

当該箇所は、以下のような感じ

{
  "Logging": {
    "LogLevel": {
      "Default": "Warning",
      "Microsoft.AspNetCore": "Warning"
    },
    "Console": {
      "FormatterName": "simple",
      "FormatterOptions": {
        "ColorBehavior": "Disabled",
        "SingleLine": true
      }
    }
  }
}

まず、 Logging というグループがあり、その中で、 Console というグループを作り(dotnetコマンドで自動生成させたときには出ていないはずなので自分で記述する) 上記のような設定をする。

FormatterName

FormatterName は、他にも json などがあるが、ここで simple を指定しておくことで SimpleFormatter が使われる。 それだけでは、何も書いてないときと出力上の見た目は特に変化しないが、これを明示しておかないと、 SimpleConsoleFormatterOptions が参照されない関係でNG。

FormatterOptions

SimpleConsoleFormatterOptions のドキュメントにあるような項目が設定できる。ここでは、以下の2つを設定している。

  • ColorBehavior - Disabled にしておくとカラーリングされなくなる。いまはdeprecatedだが、昔は DisableColors という設定が Logging 直下に存在していたが、それの後継。
  • SingleLine - true にしておくと単一行になる。

この設定をしておけばスッキリ。

その他参照

comments powered by Disqus