Developer Tools

vlog

Structured logging: one line per entry, with a timestamp, a level and fields.

Released v1.0.0 · 2026-09-28
Import
use "stdlib/log.ven"

So a program can explain itself later.

vlog.ven
l = logger("myapp")
print l.min_level
:: 0
Reference (12 functions)

API reference

logger(name)

Builds a new Logger with the given name, no minimum level, and no context fields.

l = logger("myapp")
print l.min_level
:: prints: 0

level_number(level_name)

Converts a level name to its numeric level, or raises when the name is unknown.

print level_number("warning")
:: prints: 2

level_name_of(level_num)

Converts a numeric level back to its printed name.

print level_name_of(2)
:: prints: WARNING

set_minimum_level(l, level_name)

Raises ls minimum emitted level, filtering out anything below it.

l = logger("myapp")
set_minimum_level(l, "warning")
print l.min_level
:: prints: 2

merged_map(base, overrides)

Builds a new Map holding bases entries overlaid with overridess.

base = new_map()
map_set(base, "a", 1)
overrides = new_map()
map_set(overrides, "a", 2)
map_set(overrides, "b", 3)
print json_encode(merged_map(base, overrides))
:: prints: {"a": 2, "b": 3}

with_context(l, fields)

Returns a new Logger with fields merged on top of ls existing context.

l = logger("myapp")
fields = new_map()
map_set(fields, "region", "us")
l2 = with_context(l, fields)
print json_encode(l2.context)
:: prints: {"region": "us"}

log_entry_text(l, level_num, message, fields)

Builds the exact one-line text of a log entry, without printing it.

l = logger("myapp")
print log_entry_text(l, 1, "started", new_map())
:: prints: 2026-09-13T20:44:32Z INFO myapp: started {}

emit_log(l, level_num, message, fields)

Prints one entry through l, but only when its level meets ls minimum.

l = logger("myapp")
emit_log(l, 1, "started", new_map())
:: prints: 2026-09-13T20:44:32Z INFO myapp: started {}

debug(l, message, fields)

l = logger("myapp")
set_minimum_level(l, "info")
debug(l, "hidden", new_map())
info(l, "started", new_map())
:: prints: 2026-09-13T20:44:32Z INFO myapp: started {}

info(l, message, fields)

l = logger("myapp")
info(l, "started", new_map())
:: prints: 2026-09-13T20:44:32Z INFO myapp: started {}

warning(l, message, fields)

l = logger("myapp")
warning(l, "low disk", new_map())
:: prints: 2026-09-13T20:44:32Z WARNING myapp: low disk {}

error(l, message, fields)

l = logger("myapp")
error(l, "boom", new_map())
:: prints: 2026-09-13T20:44:32Z ERROR myapp: boom {}

Get notified when vlog changes

Get notified about

New versions and security advisories.

New and updated packages, once a day.

News on the math model built in Venutian.