The purpose of this article is to demonstrate the code required to implement the Serilog Log into an F# console application.
Setup
The below example was built into a Console Application
using F#
on the .NET 6 Framework
. The following packages were installed:
Serilog/2.11.0
Serilog.Sinks.Console/4.0.1
Serilog.Formatting.Compact/1.1.0
Serilog.Enrichers.Environment/2.2.0
Serilog.Enrichers.Process/2.0.2
Serilog.Enrichers.Span/2.3.0
Serilog.Enrichers.Thread/3.1.0
Code
Copy the below code into your Progam.fs
file and run the application. This will print 5 logs to your terminal. The LoggerConfiguration
makes use of several enrichers to add additional data to the output as well as using RenderedCompactJsonFormatter
which instructs the console writer to output the message in json format.
open System
open Serilog
open Serilog.Formatting.Compact
type Data = {
Id: int
On: bool
Created: DateTime
Message: string
MessageSome: string option
MessageNone: string option
}
[<EntryPoint>]
let main argv =
Log.Logger <-
LoggerConfiguration()
.MinimumLevel.Debug()
.Enrich.FromLogContext()
.Enrich.WithEnvironmentName()
.Enrich.WithMachineName()
.Enrich.WithThreadId()
.Enrich.WithProcessId()
.WriteTo.Console(RenderedCompactJsonFormatter())
.CreateLogger()
let dummyData : Data = {
Id = 1
On = true
Created = DateTime.UtcNow
Message = "Content"
MessageSome = Some "Content"
MessageNone = None
}
try
try
Log.Logger.Debug("{dummyData}", dummyData)
Log.Logger.Information("{dummyData}", dummyData)
Log.Logger.Warning("{dummyData}", dummyData)
Log.Logger.Error("{dummyData}", dummyData)
Log.Logger.Fatal("{dummyData}", dummyData)
1 / 0
with
| ex ->
Log.Error($"Error: %s{ex.Message}")
1
finally
Log.CloseAndFlush()
Output
{"@t":"2022-07-08T07:49:44.0016610Z","@m":"\"{ Id = 1\n On = true\n Created = 07/08/2022 07:49:44\n Message = \\\"Content\\\"\n MessageSome = Some \\\"Content\\\"\n MessageNone = None }\"","@i":"60a52653","@l":"Debug","dummyData":"{ Id = 1\n On = true\n Created = 07/08/2022 07:49:44\n Message = \"Content\"\n MessageSome = Some \"Content\"\n MessageNone = None }","EnvironmentName":"Production","MachineName":"X-MAC","ThreadId":1,"ProcessId":69944}
{"@t":"2022-07-08T07:49:44.1605920Z","@m":"\"{ Id = 1\n On = true\n Created = 07/08/2022 07:49:44\n Message = \\\"Content\\\"\n MessageSome = Some \\\"Content\\\"\n MessageNone = None }\"","@i":"60a52653","dummyData":"{ Id = 1\n On = true\n Created = 07/08/2022 07:49:44\n Message = \"Content\"\n MessageSome = Some \"Content\"\n MessageNone = None }","EnvironmentName":"Production","MachineName":"X-MAC","ThreadId":1,"ProcessId":69944}
{"@t":"2022-07-08T07:49:44.1611770Z","@m":"\"{ Id = 1\n On = true\n Created = 07/08/2022 07:49:44\n Message = \\\"Content\\\"\n MessageSome = Some \\\"Content\\\"\n MessageNone = None }\"","@i":"60a52653","@l":"Warning","dummyData":"{ Id = 1\n On = true\n Created = 07/08/2022 07:49:44\n Message = \"Content\"\n MessageSome = Some \"Content\"\n MessageNone = None }","EnvironmentName":"Production","MachineName":"X-MAC","ThreadId":1,"ProcessId":69944}
{"@t":"2022-07-08T07:49:44.1615460Z","@m":"\"{ Id = 1\n On = true\n Created = 07/08/2022 07:49:44\n Message = \\\"Content\\\"\n MessageSome = Some \\\"Content\\\"\n MessageNone = None }\"","@i":"60a52653","@l":"Error","dummyData":"{ Id = 1\n On = true\n Created = 07/08/2022 07:49:44\n Message = \"Content\"\n MessageSome = Some \"Content\"\n MessageNone = None }","EnvironmentName":"Production","MachineName":"X-MAC","ThreadId":1,"ProcessId":69944}
{"@t":"2022-07-08T07:49:44.1750560Z","@m":"\"{ Id = 1\n On = true\n Created = 07/08/2022 07:49:44\n Message = \\\"Content\\\"\n MessageSome = Some \\\"Content\\\"\n MessageNone = None }\"","@i":"60a52653","@l":"Fatal","dummyData":"{ Id = 1\n On = true\n Created = 07/08/2022 07:49:44\n Message = \"Content\"\n MessageSome = Some \"Content\"\n MessageNone = None }","EnvironmentName":"Production","MachineName":"X-MAC","ThreadId":1,"ProcessId":69944}
{"@t":"2022-07-08T07:49:44.1825110Z","@m":"Error: Attempted to divide by zero.","@i":"79a82f6d","@l":"Error","EnvironmentName":"Production","MachineName":"X-MAC","ThreadId":1,"ProcessId":69944}
Top comments (0)