はじめに
七尾百合子さん、お誕生日 112日目 おめでとうございます! nikkieです。
dotnet watchやdotnet runでMinimal APIを立ち上げたときの、コンソール出力について調べました。
目次
コンソールの表示が気になります
dotnet new webして「Hello World」できました。
ターミナルには以下のように表示されています
info: Microsoft.Hosting.Lifetime[14]
Now listening on: http://localhost:5091
info: Microsoft.Hosting.Lifetime[0]
Application started. Press Ctrl+C to shut down.
info: Microsoft.Hosting.Lifetime[0]
Hosting environment: Development
info: Microsoft.Hosting.Lifetime[0]
Content root path: /.../minimal-api-practice/App
これがやや気になったのです。
どんな仕組みによるものなのでしょう?
WebApplication.CreateBuilder はログプロバイダーを追加する
dotnet new webで得た手元のApp/Program.fsには以下の行があります。
let builder = WebApplication.CreateBuilder(args)
ここでログの設定もされていました。
デフォルト設定が使われているわけです。
既定の ASP.NET Core Web アプリ テンプレートからは WebApplication.CreateBuilder が呼び出されます。これにより、次のログ プロバイダーが追加されます。(ログ プロバイダー)
Console プロバイダーでは、コンソールへの出力がログに記録されます。(コンソール)
2行のログを1行に書式設定
(Claude Codeに引っ張ってもらって得た動くコードを、ドキュメントにあたりながら理解を深め、ここに書きつけています)
+open Microsoft.Extensions.Logging let builder = WebApplication.CreateBuilder(args) +builder.Logging.AddSimpleConsole(fun options -> + options.SingleLine <- true +) |> ignore
Simpleコンソールフォーマッタのオプションを指定しました。
https://learn.microsoft.com/ja-jp/dotnet/core/extensions/console-log-formatter#simple
1行になってる!
info: Microsoft.Hosting.Lifetime[14] Now listening on: http://localhost:5091 info: Microsoft.Hosting.Lifetime[0] Application started. Press Ctrl+C to shut down. info: Microsoft.Hosting.Lifetime[0] Hosting environment: Development info: Microsoft.Hosting.Lifetime[0] Content root path: /.../minimal-api-practice/App
タイムスタンプを表示したり色付きにしたりもできるんです!
open Microsoft.Extensions.Logging +open Microsoft.Extensions.Logging.Console let builder = WebApplication.CreateBuilder(args) builder.Logging.AddSimpleConsole(fun options -> options.SingleLine <- true + options.TimestampFormat <- "HH:mm:ss " + options.ColorBehavior <- LoggerColorBehavior.Enabled ) |> ignore

今回のソースコードです
宿題事項
options.IncludeScopes(スコープ)ってなんだろう?- Claude Codeが書いた
<-を使った書き方はドキュメントとは異なるのですが、F#とC#の違いなのかな? - タイムスタンプ追加できたので、
Microsoft.Hosting.Lifetime[0]の部分を削るようなこともできるのかな?optionsで有効・無効切り替える感じでなく、カスタムフォーマッタ?- Claude Code迷走したので、deep researchからやるのがいいかも
- .NET Core組み込みではなく、サードパーティのロギングを使うときはどうするんだろう?
終わりに
WebApplication.CreateBuilderによって、Minimal APIにデフォルトのログの設定もされていました。
SimpleConsoleFormatterOptionsを使って、1行にしたり、色を付けたり、タイムスタンプを表示したり、書式変更できました!
手を動かす中で思い出していたのは、Pythonのuvicornのロギングです。
Pythonのロギングと同じように考えていいならフォーマッタをいじればMicrosoft.Hosting.Lifetime[0]の部分は消せそうですが、果たして