Skip to content

Instantly share code, notes, and snippets.

@cboudereau
Created May 9, 2017 15:39
Show Gist options
  • Save cboudereau/b4304a11109f4225e5b16628c37354f7 to your computer and use it in GitHub Desktop.
Save cboudereau/b4304a11109f4225e5b16628c37354f7 to your computer and use it in GitHub Desktop.
#r @"packages\Suave\lib\net40\Suave.dll"
#r @"packages\NLog\lib\net45\NLog.dll"
open System
open System.IO
open Suave
open System.Net
open Suave.Filters
open Suave.Operators
open Suave.RequestErrors
open Suave.Successful
let nlogConfig = NLog.Config.LoggingConfiguration()
nlogConfig.AddTarget("console", new NLog.Targets.ColoredConsoleTarget("*"))
nlogConfig.AddRuleForOneLevel(NLog.LogLevel.Debug, "console", "*")
NLog.LogManager.Configuration <- nlogConfig
let logger =
let convertLevel = function
| Logging.LogLevel.Debug -> NLog.LogLevel.Debug
| Logging.LogLevel.Verbose -> NLog.LogLevel.Trace
| Logging.LogLevel.Info -> NLog.LogLevel.Info
| Logging.LogLevel.Warn -> NLog.LogLevel.Warn
| Logging.LogLevel.Error -> NLog.LogLevel.Error
| Logging.LogLevel.Fatal -> NLog.LogLevel.Fatal
let name = "WebService"
let log = NLog.LogManager.GetLogger(name)
let culture = Globalization.CultureInfo.InvariantCulture
{ new Logging.Logger with
member __.name = [|name|]
member __.log(level: Logging.LogLevel) f =
async {
let lvl = convertLevel level
if log.IsEnabled lvl then
let m = f level
let message = sprintf "%A" m.value
let name = String.Join(".", m.name)
match m.fields |> Map.tryFind "errors" with
| None -> log.Log(NLog.LogEventInfo(lvl, name, culture, message, null))
| Some ex -> log.Log(NLog.LogEventInfo(lvl, name, culture, message, null, unbox ex)) }
member this.logWithAck level f = this.log level f }
let config =
{ defaultConfig with
logger = logger }
let app =
choose
[ GET >=> choose
[ path "/hello" >=> OK "Hello GET"
path "/goodbye" >=> OK "Good bye GET"
path "/boom" >=> (fun _ -> async.Return (failwith "boom!")) ]
POST >=> choose
[ path "/hello" >=> OK "Hello POST"
path "/goodbye" >=> OK "Good bye POST" ] ]
>=> Suave.Filters.logWithLevel Logging.LogLevel.Info logger logFormat
startWebServer config app
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment