log stack traces
This commit is contained in:
@@ -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) })
|
||||
|
||||
Reference in New Issue
Block a user