log stack traces

This commit is contained in:
2026-02-18 12:05:05 -06:00
parent 4b635228f9
commit 037fdbfd2c
6 changed files with 171 additions and 114 deletions

View File

@@ -324,6 +324,7 @@ var log_config = null
var channel_sinks = {}
var wildcard_sinks = []
var warned_channels = {}
var log_stack_enabled = false
function log(name, args) {
var msg = args[0]
@@ -476,15 +477,27 @@ function load_log_config() {
}
}
build_sink_routing()
log_stack_enabled = log_config.stack == true
}
function pretty_format(rec) {
var aid = text(rec.actor_id, 0, 5)
var src = ""
var ev = null
var out = null
var i = 0
var fr = null
if (rec.source && rec.source.file)
src = rec.source.file + ":" + text(rec.source.line)
var ev = is_text(rec.event) ? rec.event : json.encode(rec.event, false)
return `[${aid}] [${rec.channel}] ${src} ${ev}\n`
ev = is_text(rec.event) ? rec.event : json.encode(rec.event, false)
out = `[${aid}] [${rec.channel}] ${src} ${ev}\n`
if (rec.stack && length(rec.stack) > 0) {
for (i = 0; i < length(rec.stack); i = i + 1) {
fr = rec.stack[i]
out = out + ` at ${fr.fn} (${fr.file}:${text(fr.line)}:${text(fr.col)})\n`
}
}
return out
}
function bare_format(rec) {
@@ -523,6 +536,9 @@ load_log_config()
log = function(name, args) {
var sinks = channel_sinks[name]
var event = args[0]
var caller = null
var stack = null
var rec = null
if (!sinks && length(wildcard_sinks) == 0) {
if (!warned_channels[name]) {
@@ -532,14 +548,16 @@ log = function(name, args) {
return
}
var caller = caller_info(2)
var rec = {
caller = caller_info(2)
if (log_stack_enabled) stack = os.stack(1)
rec = {
actor_id: _cell.id,
timestamp: time.number(),
channel: name,
event: event,
source: caller
}
if (stack) rec.stack = stack
if (sinks) arrfor(sinks, function(sink) { dispatch_to_sink(sink, rec) })
arrfor(wildcard_sinks, function(sink) { dispatch_to_sink(sink, rec) })