Created
May 16, 2022 14:28
-
-
Save nodakai/70dd6f915ba14f36c122f601732af1c1 to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
module Logger = | |
open System | |
open System.IO | |
open System.Text | |
type LogLevel = TRACE | DEBUG | INFO | |
type Logger0(writer: TextWriter) = | |
member x.Log (fmt: PrintfFormat<'Printer, _, _, _>): 'Printer = | |
Printf.fprintfn writer fmt | |
type LevelLogger0(writer: TextWriter, level: LogLevel) = | |
inherit Logger0(writer) | |
member x.Info (fmt: PrintfFormat<'Printer, _, _, _>): 'Printer = | |
if level <= LogLevel.INFO then | |
x.Log fmt | |
member x.Debug (fmt: PrintfFormat<'Printer, _, _, _>): 'Printer = | |
if level <= LogLevel.DEBUG then | |
x.Log fmt | |
type Logger1(writer: TextWriter) = | |
member x.Log tw (fmt: PrintfFormat<'Printer, _, _, _>): 'Printer = | |
Printf.fprintfn tw fmt | |
type LevelLogger1(writer: TextWriter, level: LogLevel) = | |
inherit Logger1(writer) | |
let getTw(threshold: LogLevel) = | |
if level <= threshold then writer else TextWriter.Null | |
member x.Info (fmt: PrintfFormat<'Printer, _, _, _>): 'Printer = | |
x.Log (getTw LogLevel.INFO) fmt | |
member x.Debug (fmt: PrintfFormat<'Printer, _, _, _>): 'Printer = | |
x.Log (getTw LogLevel.DEBUG) fmt | |
type Logger2() = | |
member val StringBuilder = StringBuilder() | |
member x.Log k (fmt: PrintfFormat<'Printer, _, _, _>): 'Printer = | |
Printf.kbprintf k (x.StringBuilder.Clear()) fmt | |
type LevelLogger2(writer: TextWriter, level: LogLevel) as x = | |
inherit Logger2() | |
let action(threshold: LogLevel) () = | |
if level <= threshold then writer.WriteLine(x.StringBuilder) | |
member x.Info (fmt: PrintfFormat<'Printer, _, _, _>): 'Printer = | |
x.Log (action LogLevel.INFO) fmt | |
member x.Debug (fmt: PrintfFormat<'Printer, _, _, _>): 'Printer = | |
x.Log (action LogLevel.DEBUG) fmt | |
module App = | |
open System | |
(* | |
let main0 args = | |
let logger = Logger.LevelLogger0(Console.Out, Logger.INFO) | |
logger.Debug "launch at %A" DateTime.UtcNow | |
logger.Info "hello with args %A" args | |
logger.Debug "shutdown at %A" DateTime.UtcNow | |
0 *) | |
let main1 args = | |
let logger = Logger.LevelLogger1(Console.Out, Logger.INFO) | |
logger.Debug "launch at %A" DateTime.UtcNow | |
logger.Info "hello with args %A" args | |
logger.Debug "shutdown at %A" DateTime.UtcNow | |
0 | |
let main2 args = | |
let logger = Logger.LevelLogger2(Console.Out, Logger.INFO) | |
logger.Debug "launch at %A" DateTime.UtcNow | |
logger.Info "hello with args %A" args | |
logger.Debug "shutdown at %A" DateTime.UtcNow | |
0 | |
[<EntryPoint>] | |
let main args = App.main1 args | |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
hello with args [||] |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
{ | |
"version": 1, | |
"target": "Run", | |
"mode": "Release", | |
"branch": "core-x64" | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment