fix(logs): render plain log notices verbatim instead of mangling them as timestamps

A plain message with no timestamp/level (e.g. the Windows 'Syslog is not
supported' notice) was parsed by the app-log branch, which took the first
three words as date/time/level and dropped the rest. Match the strict
'YYYY/MM/DD LEVEL - body' shape only, keep other lines whole, and drop the
leading separator when there is no stamp or level.
This commit is contained in:
MHSanaei
2026-06-25 23:59:49 +02:00
parent 1d69508263
commit df0e52cda8
2 changed files with 15 additions and 9 deletions
+1 -1
View File
@@ -147,7 +147,7 @@ export default function LogModal({ open, onClose }: LogModalProps) {
{log.levelText && <span className={`log-level ${log.levelClass}`}>{log.levelText}</span>} {log.levelText && <span className={`log-level ${log.levelClass}`}>{log.levelText}</span>}
{(log.body || log.service) && ( {(log.body || log.service) && (
<> <>
<span> - </span> {(log.stamp || log.levelText) && <span> - </span>}
{log.service && <b>{log.service}</b>} {log.service && <b>{log.service}</b>}
{log.service && log.body ? ' ' : ''} {log.service && log.body ? ' ' : ''}
<span>{log.body}</span> <span>{log.body}</span>
+14 -8
View File
@@ -41,6 +41,11 @@ const SYSLOG_PREFIX = /^([A-Za-z]{3}\s+\d{1,2})\s+(\d{2}:\d{2}:\d{2})\s+\S+\s+\S
const GO_LOG_DATE = /^\d{4}\/\d{2}\/\d{2}\s+\d{2}:\d{2}:\d{2}\s+/; const GO_LOG_DATE = /^\d{4}\/\d{2}\/\d{2}\s+\d{2}:\d{2}:\d{2}\s+/;
// telego's own line prefix: "[Mon Jan _2 15:04:05 MST 2006] LEVEL rest". // telego's own line prefix: "[Mon Jan _2 15:04:05 MST 2006] LEVEL rest".
const TELEGO = /^\[[^\]]+\]\s+([A-Z]+)\s+(.*)$/; const TELEGO = /^\[[^\]]+\]\s+([A-Z]+)\s+(.*)$/;
// App-log format emitted by the in-memory buffer:
// "2006/01/02 15:04:05 LEVEL - message". Only a line matching this exact shape
// carries a structured timestamp/level; anything else (e.g. a plain notice such
// as the Windows "Syslog is not supported" message) is kept whole as the body.
const APP_LOG = /^(\d{4}\/\d{2}\/\d{2})\s+(\d{2}:\d{2}:\d{2})\s+(\S+)\s+-\s+([\s\S]*)$/;
// splitLevelDash pulls a leading "LEVEL - " off a message, returning the level // splitLevelDash pulls a leading "LEVEL - " off a message, returning the level
// and the remainder. Returns null when the message does not start with a level. // and the remainder. Returns null when the message does not start with a level.
@@ -84,16 +89,17 @@ export function parseLogLine(line: string): ParsedLog {
} }
} }
} else { } else {
// App-log format: "2006/01/02 15:04:05 LEVEL - body" const app = raw.match(APP_LOG);
const [head, ...rest] = raw.split(' - '); if (app) {
const message = rest.join(' - '); // App-log format: "2006/01/02 15:04:05 LEVEL - body"
const parts = head.split(' '); date = app[1];
if (parts.length >= 3) { time = app[2];
[date, time, levelText] = parts; levelText = app[3];
body = app[4];
} else { } else {
levelText = head; // Plain message with no timestamp/level — show it verbatim.
body = raw;
} }
body = message || '';
} }
const li = LEVELS.indexOf(levelText); const li = LEVELS.indexOf(levelText);