如何在 F# Saturn 框架中自定义日志记录?

How to customize logging in F# Saturn framework?

我按照 here 所述创建了一个默认的 SAFE 应用程序。 去掉多余的东西,服务器是这样的:

open Giraffe
open Saturn

let webApp = scope {
    get "/api/init" (fun next ctx ->
        task {
            let number = 42
            let! counter = task { return number }
            return! Successful.OK counter next ctx
        })
}

let app = application {
    url ("http://0.0.0.0:8085/")
    router webApp
    memory_cache
    use_static "../Client/public"
    use_gzip
}

run app

现在,当 运行 应用程序时,我在控制台中看到一些日志记录,基本上是传入请求:

info: Microsoft.AspNetCore.Hosting.Internal.WebHost[1]
      Request starting HTTP/1.1 GET http://localhost:8085/api/init

如何自定义日志记录? docs 尽量稀少,没有例子。我需要一些简单的东西,比如记录 "going to return 42..."。 或者至少与案例有一些联系。

您可以从上下文中提取完全成熟的 ILogger 对象,ctx

打开Microsoft.Extensions.Logging模块,然后你可以这样做:

let webApp = scope {
    get "/api/init" (fun next ctx ->
        task {
            let logger = ctx.GetLogger();

            let number = 42
            logger.Log(LogLevel.Information, "Going to return " + number.ToString())

            let! counter = task { return number }
            return! Successful.OK counter next ctx
        })
}

这将带给您的控制台:

info: object[0]
      Going to return 42

我没有任何合适的参考资料。我在 Giraffe 服务器的 Github 找到了一个类似的 thing,Saturn 基本上是一组抽象。

日志配置至少内置于 v0.9 中。我自己使用下面的案例来抑制大部分日志记录。

open Microsoft.Extensions.Logging

let app = application {
    url ("http://0.0.0.0:8085/")
    use_router webApp
    logging (fun logger -> logger.SetMinimumLevel LogLevel.Critical |> ignore)
}