Open3
F# で Microsoft.Extensions.Logging を扱う
F# から Microsoft.Extensions.Logging パッケージを利用してコンソールにログを出力したい
.fsproj
を作るのは面倒なので F# Scripts (.fsx
) で記述する
logger.fsx
#r "nuget: Microsoft.Extensions.Logging, 6.0.0"
#r "nuget: Microsoft.Extensions.Logging.Console, 6.0.0"
このようにディレクティブを記述すれば、 Microsoft.Extensions.Logging
, Microsoft.Extensions.Logging.Console
名前空間が利用可能になる
Microsoft.Extensions.Logging
ロギングに関するインターフェースを提供する
Microsoft.Extensions.Logging.Console
Microsoft.Extensions.Logging のインターフェースに対する、コンソールでのロギングのための幾つかの実装 (以下、ロギングプロバイダ) を提供する
ロガーを作成・使用するための基本的な手順は以下のとおり
-
LoggerFactory
型インスタンスを、Create
クラスメソッドを介して得る- その際、コールバック関数内で
ILoggerBuilder
型の引数に対して各種メソッドを呼び出すことで、ロガー実装に関する設定を行う
- その際、コールバック関数内で
-
LoggerFactory
のCreateLogger
インスタンスメソッドで、ロガーであるILogger
型インスタンスを得る -
ILogger
型インスタンスにはLogTrace
,LogDebug
,LogInformation
,LogWarning
,LogError
,LogCritical
等のメソッドがあり、それらを呼び出してロギングする
SimpleConsole と呼ばれるロギングプロバイダを選択してロガーを作成する例
logger.fsx
open Microsoft.Extensions.Logging
let () =
use loggerFactory =
LoggerFactory.Create(fun builder -> builder.AddSimpleConsole() |> ignore)
let logger = loggerFactory.CreateLogger "myLogger"
LoggerFactory
は IDisposable
を実装しているので、ロギング終了時のリソース開放のために use
バインディングを使用している
AddConsole
は ILoggingBuilder
に対しての拡張メソッドだが、なぜか ILoggingBuilder
を返却するので ignore
している。AddConsole
の呼び出しに副作用があるのにどうして ILoggingBuilder
を返却しているのかはわからない。