【ASP.NET Core Web】Serilogでログをファイルを出力する

ネコニウム研究所

PCを利用したモノづくりに関連する情報や超個人的なナレッジを掲載するブログ

【ASP.NET Core Web】Serilogでログをファイルを出力する

2024-4-17 | , ,

ASP.NET Core WebでパッケージSerilogを使ってログをファイルを出力したい!

概要

今回の記事では、ASP .NET Core WebでパッケージSerilogを使ってログをファイルを出力する手順を掲載する。

仕様書

環境

  • .NET 8
  • Serilog 3.1.1
  • Serilog.AspNetCore 8.0.1

手順書

インストール編とコード編の2部構成です。

インストール編

ターミナルで下記のコマンドを実行するか、「NuGet パッケージの管理」から「Serilog」と「Serilog.AspNetCore」をインストールする。

dotnet add package Serilog
dotnet add package Serilog.AspNetCore

コード編

Program.csSerilogのログの設定を追加する。

...
using Serilog;

public class Program
{
    public static void Main(string[] args)
    {
        var builder = WebApplication.CreateBuilder(args);

        ...

        Log.Logger = new LoggerConfiguration()
            .WriteTo.Console()
            .WriteTo.Debug()
            .WriteTo.File("log.txt", rollingInterval: RollingInterval.Day)
            .CreateLogger();

        builder.Host.UseSerilog(Log.Logger);

        ...

        app.Run();
    }
}

メソッドWriteTo.Fileの第1引数でログファイルのパスとファイル名を設定する。この例では実行ファイルのあるディレクトリにlog<yyymmdd>.txtが作成される。
rollingIntervalでファイルをどう分けるか設定できる。RollingInterval.Dayを設定すると日毎にログファイルが作成される。

あとは、コントローラーの中などでASP .NET Coreの標準のログと同様にメソッドLogInformation`などでログを出力できる。

public class SampleController : Controller
{
    private readonly ILogger<SampleController> logger;

    public SampleController(ILogger<SampleController> lgr)
    {
        logger = lgr;
    }

    public JsonResult Index()
    {
        logger.LogInformation($@"Index!!!!!!!");

        return new JsonResult(new { message = "Index.", })
        { StatusCode = 200 };
    }
}

ASP .NET Core`の標準のログを使ったコードからコードを書き換えなくて済むのは楽で助かる。

まとめ(感想文)

サーバーで動かすプログラムのデバッグってローカルで動かすプログラムと比べて大変だと思う今日この頃。