stack trace in logging toml
This commit is contained in:
@@ -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(),
|
||||
|
||||
Reference in New Issue
Block a user