~/bend-docscommunity

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

type Value source · line 12 · raw

Data

type Field source · line 17 · raw

Data

type Format source · line 21 · raw

Data

Text is logfmt, as Go's slog TextHandler writes it. Json is one object per line.

type Logger source · line 26 · raw

Data

ctx holds the fields from with, oldest first. A line puts them before its own fields.

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)