diff --git a/webapp/src/components/tabContentComponents/loggingContent.vue b/webapp/src/components/tabContentComponents/loggingContent.vue
index 6a957678..2c008682 100644
--- a/webapp/src/components/tabContentComponents/loggingContent.vue
+++ b/webapp/src/components/tabContentComponents/loggingContent.vue
@@ -50,8 +50,20 @@
'uk-alert-danger uk-alert': item.level == 'ERROR'
}"
>
- {{ formatDateTime(item.timestamp) }}
-
{{ formatMessage(item) }}
+ {{ formatDateTime(item.timestamp) }}: {{ item.level }}
+
0) {
let m = line.match(regexp);
if (m) {
- this.logs.push({
+ logs.push({
timestamp: m[1],
level: m[2],
+ summary: m[3],
message: m[3],
- sequence: this.logs.length
+ sequence: logs.length,
+ expanded: false
});
- } else if (this.logs) {
+ } else if (logs) {
// If a line does not look like a log entry, append it to the last
// log entry (i.e. allow multi-line messages)
- this.logs[this.logs.length - 1].message += "\n" + line;
+ let entry = logs[logs.length - 1];
+ entry.message += "\n" + line;
+ if (entry.message.startsWith("Traceback")) {
+ entry.summary = line; // For tracebacks, the last line is the best summary
+ }
} else {
// if there's no existing log message to append to, discard lines
// until we find one.
+ console.log(
+ "Ignored non-matching lines at the start of the log file."
+ );
continue;
}
}
}
+ this.logs = logs.reverse(); // Display in reverse chronological order
},
formatDateTime: function(isoDateTimeString) {
isoDateTimeString = isoDateTimeString.replace(",", ".");
let date = new Date(isoDateTimeString);
return date.toLocaleDateString() + " " + date.toLocaleTimeString();
- },
- formatMessage: function(item) {
- return item.level + ": " + item.message;
}
}
};
@@ -185,5 +204,7 @@ export default {
}
.logging-message {
font-family: monospace;
+ overflow-x: auto;
+ text-wrap: nowrap;
}