Skip to content

Commit 2b46ddb

Browse files
authored
Merge pull request #1 from dbrattli/json-logger
Json logger
2 parents 614508b + b29f18d commit 2b46ddb

File tree

3 files changed

+27
-6
lines changed

3 files changed

+27
-6
lines changed

.config/dotnet-tools.json

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,13 +3,13 @@
33
"isRoot": true,
44
"tools": {
55
"fantomas": {
6-
"version": "5.0.1",
6+
"version": "5.0.2",
77
"commands": [
88
"fantomas"
99
]
1010
},
1111
"fable": {
12-
"version": "4.0.0-theta-006",
12+
"version": "4.0.0-theta-008",
1313
"commands": [
1414
"fable"
1515
]

src/Fable.Structlog.fs

Lines changed: 22 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -41,23 +41,26 @@ type StructLog =
4141
[<ImportAll("structlog")>]
4242
let structLog: StructLog = nativeOnly
4343

44-
type ConsoleLogger() =
44+
type Logger(processors: Processor list) =
4545

4646
let wrappedLogger = structLog.getLogger ()
4747

48+
// processor that combines args with the placeholders in the format
49+
// string to generate parameters to be used with structlog
4850
let processor (logger: WrappedLogger) (logMethod: string) (eventDict: EventDict) : EventDict =
4951
let event = eventDict["event"] :?> string
5052
let args = eventDict["args"] :?> obj[]
5153

5254
let format, parameters = Common.translateFormat event args
5355

54-
// printfn "string.format %A" (format, args)
5556
let event = String.Format(format, args = args)
5657
parameters["event"] <- event
5758
parameters
5859

5960
let logger =
60-
structLog.wrapLogger (wrappedLogger, [ Processor(processor) ] |> ResizeArray)
61+
structLog.wrapLogger (wrappedLogger, Processor(processor) :: processors |> ResizeArray)
62+
63+
new() = Logger([])
6164

6265
member val MinimumLevel = LogLevel.Trace with get, set
6366

@@ -81,11 +84,26 @@ type ConsoleLogger() =
8184
| LogLevel.Critical -> logger.Critical(message, dict [ "args", args ])
8285
| _ -> logger.Info(message, dict [ "args", args ])
8386

84-
member x.IsEnabled(logLevel: LogLevel) = true
87+
member x.IsEnabled(logLevel: LogLevel) = logLevel >= x.MinimumLevel
8588
member x.BeginScope(var0) = failwith "Not implemented"
8689

8790

91+
type ConsoleLogger() =
92+
inherit Logger()
93+
94+
[<Import("JsonRenderer", "structlog.processors")>]
95+
let JsonRenderer: unit -> Processor = nativeOnly
96+
97+
type JsonLogger() =
98+
inherit Logger([ JsonRenderer() ])
99+
100+
88101
type ConsoleLoggerProvider() =
89102
interface ILoggerProvider with
90103
member this.CreateLogger(name) = new ConsoleLogger()
91104
member this.Dispose() = ()
105+
106+
type JsonLoggerProvider() =
107+
interface ILoggerProvider with
108+
member this.CreateLogger(name) = new JsonLogger()
109+
member this.Dispose() = ()

src/ILogger.fs

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -50,6 +50,9 @@ type ILoggerFactory =
5050
module Extensions =
5151
type ILogger with
5252

53+
member inline this.Log<'T>(level: LogLevel, format: string, ?parameters: obj array, ?error: exn) =
54+
this.Log(LogState.Create(level, format, ?parameters = parameters, ?error = error))
55+
5356
member this.Log(logLevel: LogLevel, message: string) =
5457
if this.IsEnabled logLevel then
5558
LogState.Create(logLevel, message)

0 commit comments

Comments
 (0)