notch.bend relies on unsafe/foreign
raw source on the hub · import bend-kit-notch@0.1.0.1/notch.bend as Notch
Leveled, structured logging: a logger value, key-value fields, and logfmt or JSON-lines output. Source: https://github.com/paymog/bend-kit/tree/main/notch
2 imports
import Base import bend-kit-time@0.1.2.1/time.bend as Time
Types
type Level source · line 6 · raw
Data
DebugLevel
InfoLevel
WarnLevel
ErrorLevel
type Value source · line 12 · raw
Data
Str@s:String -> Value
Num@n:U32 -> Value
Flag@b:Bool -> Value
type Field source · line 17 · raw
Data
Field@key:String -> @val:Value -> Field
type Format source · line 21 · raw
Data
Text is logfmt, as Go's slog TextHandler writes it. Json is one object per line.
TextFormat
JsonFormat
type Logger source · line 26 · raw
Data
ctx holds the fields from with, oldest first. A line puts them before its own fields.
Logger@min:Level -> @format:Format -> @ctx:List<&2, Field> -> Logger
Definitions
def Level.rank source · line 32 · raw
@l:Level -> Nat
def Level.name source · line 43 · raw
@l:Level -> String
def text source · line 57 · raw
@min:Level -> Logger
def json source · line 60 · raw
@min:Level -> Logger
def with source · line 64 · raw
@lg:Logger -> @fs:List<&2, Field> -> Logger
A logger that adds fs to every line, after the fields it already adds.
def enabled source · line 69 · raw
@lg:Logger -> @lvl:Level -> Bool
def str source · line 74 · raw
@k:String -> @v:String -> Field
def num source · line 77 · raw
@k:String -> @n:U32 -> Field
def flag source · line 80 · raw
@k:String -> @b:Bool -> Field
def hex source · line 86 · raw
@+n:U32 -> Char
def esc.ctl source · line 89 · raw
@ctl:Bool -> @+c:U32 -> @rest:String -> String
def esc.c source · line 98 · raw
@+c:U32 -> @rest:String -> String
JSON (RFC 8259 §7): quote, backslash and control chars are escaped.
def esc source · line 113 · raw
@s:String -> @rest:String -> String
def quote source · line 120 · raw
@s:String -> String
def bare.c source · line 124 · raw
@+c:U32 -> Bool
A bare logfmt token has no whitespace, controls, '=', quote or DEL.
def bare.go source · line 131 · raw
@s:String -> Bool
def bare source · line 138 · raw
@s:String -> Bool
def tq.if source · line 145 · raw
@ok:Bool -> @s:String -> String
def tq source · line 153 · raw
@+s:String -> String
A logfmt key or string value: bare when it can be, else a JSON string.
def Bool.word source · line 156 · raw
@b:Bool -> String
def Value.text source · line 163 · raw
@v:Value -> String
def Value.json source · line 172 · raw
@v:Value -> String
def fields.text source · line 181 · raw
@fs:List<&2, Field> -> String
def fields.json source · line 188 · raw
@fs:List<&2, Field> -> String
def time.text source · line 195 · raw
@t:Maybe<&2, String> -> String
def time.json source · line 202 · raw
@t:Maybe<&2, String> -> String
def render.as source · line 209 · raw
@f:Format -> @t:Maybe<&2, String> -> @lvl:Level -> @msg:String -> @fs:List<&2, Field> -> String
def render source · line 219 · raw
@lg:Logger -> @t:Maybe<&2, String> -> @lvl:Level -> @msg:String -> @fs:List<&2, Field> -> String
One line, without its newline, whatever the level. t is the time text; None leaves it out.
def line.if source · line 225 · raw
@on:Bool -> @lg:Logger -> @t:Maybe<&2, String> -> @lvl:Level -> @msg:String -> @fs:List<&2, Field> -> Maybe<&2, String>
def line source · line 234 · raw
@+lg:Logger -> @t:Maybe<&2, String> -> @+lvl:Level -> @msg:String -> @fs:List<&2, Field> -> Maybe<&2, String>
The line, or None when lvl is below the logger's level. A dropped line is never rendered.
def stamp source · line 241 · raw
@lg:Logger -> @lvl:Level -> @msg:String -> @fs:List<&2, Field> -> IO(String)
def log.if source · line 246 · raw
@on:Bool -> @lg:Logger -> @lvl:Level -> @msg:String -> @fs:List<&2, Field> -> IO(Unit)
def log source · line 256 · raw
@+lg:Logger -> @+lvl:Level -> @msg:String -> @fs:List<&2, Field> -> IO(Unit)
Writes the line to stderr, stamped with the wall clock in RFC 3339. Below the logger's level, it reads no clock.
def file.if source · line 261 · raw
@on:Bool -> @h:File -> @lg:Logger -> @lvl:Level -> @msg:String -> @fs:List<&2, Field> -> IO(Pair(File, Result<&1, &1, Pair(U32, String), Unit>))
Write a stamped line and newline to a File; the returned handle must be kept or closed. Below the logger's level, returns the same handle and Done without a clock read or write.
def file source · line 271 · raw
@h:File -> @+lg:Logger -> @+lvl:Level -> @msg:String -> @fs:List<&2, Field> -> IO(Pair(File, Result<&1, &1, Pair(U32, String), Unit>))
def debug source · line 275 · raw
@lg:Logger -> @msg:String -> @fs:List<&2, Field> -> IO(Unit)
def info source · line 278 · raw
@lg:Logger -> @msg:String -> @fs:List<&2, Field> -> IO(Unit)
def warn source · line 281 · raw
@lg:Logger -> @msg:String -> @fs:List<&2, Field> -> IO(Unit)
def error source · line 284 · raw
@lg:Logger -> @msg:String -> @fs:List<&2, Field> -> IO(Unit)