stack trace in logging toml

This commit is contained in:
2026-02-18 12:22:33 -06:00
parent 037fdbfd2c
commit a1d1e721b6
2 changed files with 29 additions and 13 deletions

View File

@@ -324,7 +324,7 @@ var log_config = null
var channel_sinks = {}
var wildcard_sinks = []
var warned_channels = {}
var log_stack_enabled = false
var stack_channels = {}
function log(name, args) {
var msg = args[0]
@@ -438,6 +438,7 @@ function ensure_log_dir(path) {
function build_sink_routing() {
channel_sinks = {}
wildcard_sinks = []
stack_channels = {}
var names = array(log_config.sink)
arrfor(names, function(name) {
var sink = log_config.sink[name]
@@ -445,7 +446,12 @@ function build_sink_routing() {
if (!is_array(sink.channels)) sink.channels = []
if (is_text(sink.exclude)) sink.exclude = [sink.exclude]
if (!is_array(sink.exclude)) sink.exclude = []
if (is_text(sink.stack)) sink.stack = [sink.stack]
if (!is_array(sink.stack)) sink.stack = []
if (sink.type == "file" && sink.path) ensure_log_dir(sink.path)
arrfor(sink.stack, function(ch) {
stack_channels[ch] = true
})
arrfor(sink.channels, function(ch) {
if (ch == "*") {
wildcard_sinks[] = sink
@@ -471,13 +477,13 @@ function load_log_config() {
terminal: {
type: "console",
format: "pretty",
channels: ["console", "error", "system"]
channels: ["console", "error", "system"],
stack: ["error"]
}
}
}
}
build_sink_routing()
log_stack_enabled = log_config.stack == true
}
function pretty_format(rec) {
@@ -503,7 +509,16 @@ function pretty_format(rec) {
function bare_format(rec) {
var aid = text(rec.actor_id, 0, 5)
var ev = is_text(rec.event) ? rec.event : json.encode(rec.event, false)
return `[${aid}] ${ev}\n`
var out = `[${aid}] ${ev}\n`
var i = 0
var fr = null
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 sink_excluded(sink, channel) {
@@ -549,7 +564,7 @@ log = function(name, args) {
}
caller = caller_info(2)
if (log_stack_enabled) stack = os.stack(1)
if (stack_channels[name]) stack = os.stack(1)
rec = {
actor_id: _cell.id,
timestamp: time.number(),