Serilog를 F#으로 구성 및 구현
17113 단어 dotnetfsharplprogramming
설정
아래 예제는
Console Application
에서 F#
를 사용하여 .NET 6 Framework
에 빌드되었습니다. 다음 패키지가 설치되었습니다.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
암호
아래 코드를
Progam.fs
파일에 복사하고 애플리케이션을 실행합니다. 이렇게 하면 터미널에 5개의 로그가 인쇄됩니다. LoggerConfiguration
는 콘솔 작성자에게 메시지를 json 형식으로 출력하도록 지시하는 RenderedCompactJsonFormatter
를 사용할 뿐만 아니라 출력에 추가 데이터를 추가하기 위해 여러 보강자를 사용합니다.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()
산출
{"@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}
Reference
이 문제에 관하여(Serilog를 F#으로 구성 및 구현), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/robmulpeter/implement-serilog-into-f-297g텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)