SerilogでログレベルをSkinごとに設定する

こんにちは。ビーグルソフトの真鍋です。

ASP.NET MVC Coreもバージョンが2.1になってちょっと盛り上がってきた感があるようなないような感じですが、いろいろとエコシステムもこなれてきて大分何をするにも困らない状況になってきた感じがします。今回はログの出力でログレベルを出力先ごとに変更するための設定について調べたものを簡単にまとめました。

Serilogでログレベルを変更する

Serilogで指定したログレベルをSkinごとに設定するためには以下の通り、各SkinでrestrictedToMinimumLevelを指定します。

Log.Logger = new LoggerConfiguration()
    .Enrich.FromLogContext()
    .MinimumLevel.Debug()
    .WriteTo.Console()
    .WriteTo.Slack(SlackUrl, restrictedToMinimumLevel: LogEventLevel.Information)
    .CreateLogger();

Log.Information("GirafaBillBatch start!");
Log.Debug("sample");
Log.Information("GirafaBillBatch end!");

上記の設定の場合には、すべてのSkinでDebugレベル以上の出力を行うように設定しています。その結果、Console SkinについてはDebugレベル以上のログが出力されます。

一方でSlack Skinについては引数でInformationレベル以上の出力を行うように設定しているため、Informationレベル以上のログしか出力されません。

Consoleヘのログ出力

Image from Gyazo

Slackへのログ出力

Image from Gyazo

おわりに

通常のログ出力とは異なり、どうしても通知したいログ、例えばエラーログのみをSlackに通知するということができるのはちょっとしたプログラムでは便利です。ある程度の規模のシステムの場合には監視の仕組みを入れていると思いますが、スクレイピングとか軽量のバッチ処理などは処理結果やエラー時のみSlackで受け取れると便利なことが多いですね。

そういうときに、Skinごと(出力先ごと)にログレベルを変更できるととても便利だなぁと思っていろいろと試してみました。

Adaptive Code ~ C#実践開発手法 第2版 (マイクロソフト関連書)

Adaptive Code ~ C#実践開発手法 第2版 (マイクロソフト関連書)

参考資料

Configuration Basics · serilog/serilog Wiki