addshore 03/19/2025 11:54 AMAs a version one, this is a slightly nice wrapper for my first use
import lite-logging
log ::= lite-logging.new lite-logging.DEBUG-LEVEL
main:
log.debug: "Hello, world!"
and
import log as toit-log
import .levels
new level/int --name/string?=null-> Logger:
return Logger level --name=name
class Logger:
logger /toit-log.Logger
logger-level /int
constructor .logger-level/int --name/string?=null:
logger = toit-log.Logger (max toit-log.DEBUG-LEVEL logger-level) toit-log.DefaultTarget --name=name
logger-level = logger-level
log level/int [block] --tags/Map?=null -> none:
if logger-level <= level: logger.log level block.call --tags=tags
trace [block] --tags/Map?=null -> none:
// Uses the debug level logger, as the toit logger has no trace level..
if logger-level <= TRACE-LEVEL: logger.log DEBUG-LEVEL "TRACE: $(block.call)" --tags=tags
debug [block] --tags/Map?=null -> none:
if logger-level <= DEBUG-LEVEL: logger.log DEBUG-LEVEL block.call --tags=tags
info [block] --tags/Map?=null -> none:
if logger-level <= INFO-LEVEL: logger.log INFO-LEVEL block.call --tags=tags
warn [block] --tags/Map?=null -> none:
if logger-level <= WARN-LEVEL: logger.log WARN-LEVEL block.call --tags=tags
error [block] --tags/Map?=null -> none:
if logger-level <= ERROR-LEVEL: logger.log ERROR-LEVEL block.call --tags=tags
Which means I can use blocks to avoid possibly expansive strings for debug logging, and leave the logging in place when the app is run in different logging modes.
It doesnt compile away the stuff that won't be used though. but solves my main pain, and doesnt look that bad at all