Native structured logging with levels and category-based filtering.
Dependencies
@xlog.info(category="app") { "message": "server started", "port": 8080 }let logger = @xlog.Logger(@xlog.Stdout())
logger.debug(category="app.db") { "message": "query plan" }Fatal Error Warn Info Debug Tracelet logger = @xlog.Logger(@xlog.Stdout())
logger.info(category="app") { "message": "server started" }MOON_XLOG=debug
MOON_XLOG='warn,app.db=debug,app.db.query=trace'let config = @xlog.Config(level=@xlog.Warn)
config.set_category_level("app.db", @xlog.Debug)
let logger = @xlog.Logger(@xlog.Stdout(), config~)
logger.debug(category="app.db") { "message": "query plan" }@xlog.global().set_handler(@xlog.Stdout())
@xlog.global().set_handler(@xlog.Stdout(format=@xlog.Text))let file = @xlog.File("_build/app.log")
@xlog.global().set_handler(file)
@xlog.info(category="app") { "message": "written to file" }let file = @xlog.File("_build/app.log")
let handlers : Array[&@xlog.Handler] = [@xlog.Stdout(), file]
@xlog.global().set_handler(@xlog.Multi(handlers))let config = @xlog.Config::from_env() catch { _ => @xlog.Config() }
@xlog.global().set_config(config)
@xlog.global().set_level(@xlog.Debug)
@xlog.info(category="app") { "message": "top-level record" }moon run examples/lorem
MOON_XLOG=debug moon run examples/lorem
MOON_XLOG='warn,lorem.db=trace,lorem.worker=debug,lorem.parser.lexer=trace' moon run examples/lorempub(all) suberror ConfigError {
InvalidCategory(String)
InvalidDirective(String)
InvalidLevel(String)
}type Configfn Config::set_category_level(self : Config, category : String, level : Level) -> Unit raise ConfigErrorpub struct Entry {
level : Level
category : String?
timestamp : ZonedDateTime
source : SourceLoc?
fields : Map[String, Json]
}type Eventtype Filetype Loggertype StdoutNative structured logging with levels and category-based filtering.
Dependencies