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

时间:2018-07-09 23:10:02

标签: f# f#-giraffe saturn-framework

我创建了一个默认的SAFE应用,如here所述。 删除多余的东西,服务器是这样的:

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尽可能稀缺,没有示例。我需要一些简单的东西,例如记录“将要返回42 ...”。 或至少与案例有一些联系。

2 个答案:

答案 0 :(得分:2)

您可以从上下文ctx中拉出完全爆炸的ILogger对象。

打开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基本上是一组抽象。

答案 1 :(得分:0)

至少v0.9中内置了日志记录配置。我为自己使用了以下情况,以抑制大部分日志记录。

std::cout << "* " << line << "*\n";