Как настроить логирование в фреймворке F# Saturn?

Я создал приложение 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

Как мне настроить ведение журнала? Документов как можно меньше, примеров нет. Мне нужно что-то простое, например, регистрация "собираюсь вернуть 42...". Или хотя бы несколько ссылок на дела.

1 ответ

Решение

Вы можете вытащить полностью взорванный объект 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

У меня нет никаких правильных ссылок. Я нашел похожую вещь на сервере Github of Giraffe, для которого Сатурн - это набор абстракций.

Конфигурация ведения журнала встроена как минимум в 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)
}
Другие вопросы по тегам