diff --git a/server/interfaces/api/settingsInterfaces.ts b/server/interfaces/api/settingsInterfaces.ts index 924023d4..336bab0b 100644 --- a/server/interfaces/api/settingsInterfaces.ts +++ b/server/interfaces/api/settingsInterfaces.ts @@ -3,7 +3,7 @@ import type { PaginatedResponse } from './common'; export type LogMessage = { timestamp: string; level: string; - label: string; + label?: string; message: string; data?: Record; }; diff --git a/server/routes/settings/index.ts b/server/routes/settings/index.ts index f58edb74..22d0f1cd 100644 --- a/server/routes/settings/index.ts +++ b/server/routes/settings/index.ts @@ -258,25 +258,29 @@ settingsRoutes.get( try { fs.readFileSync(logFile) .toString() - .split('\n') + .split(/(?=\n\d{4}-\d{2})/g) .forEach((line) => { if (!line.length) return; - const timestamp = line.match(new RegExp(/^.{24}/)) || []; - const level = line.match(new RegExp(/\s\[\w+\]/)) || []; - const label = line.match(new RegExp(/\]\[.+?\]/)) || []; - const message = line.match(new RegExp(/:\s([^{}]+)({.*})?/)) || []; + const jsonRegexp = new RegExp( + /[{[]{1}([,:{}[\]0-9.\-+Eaeflnr-u \n\r\t]|"[^"\n]*?")+[}\]]{1}/ + ); + + const timestamp = line.match(new RegExp(/.{24}/)) || []; + const level = line.match(new RegExp(/(?<=.{24}\s\[).+?(?=\])/)) || []; + const label = + line.match(new RegExp(/(?<=.{24}\s\[.+\]\[).+(?=\])/)) || []; + const message = + line.match(new RegExp(/(?<=\[.+\]:\s)[\s\S][^\r]+/)) || []; + const data = message[0].match(jsonRegexp) || []; - if (level.length && filter.includes(level[0].slice(2, -1))) { + if (level.length && filter.includes(level[0])) { logs.push({ timestamp: timestamp[0], - level: level.length ? level[0].slice(2, -1) : '', - label: label.length ? label[0].slice(2, -1) : '', - message: message.length && message[1] ? message[1] : '', - data: - message.length && message[2] - ? JSON.parse(message[2]) - : undefined, + level: level[0], + label: label[0], + message: message[0].replace(jsonRegexp, ''), + data: data.length ? JSON.parse(data[0]) : undefined, }); } }); diff --git a/src/components/Settings/SettingsLogs/index.tsx b/src/components/Settings/SettingsLogs/index.tsx index 572246fd..a9e8c0cf 100644 --- a/src/components/Settings/SettingsLogs/index.tsx +++ b/src/components/Settings/SettingsLogs/index.tsx @@ -321,7 +321,9 @@ const SettingsLogs: React.FC = () => { {row.level.toUpperCase()} - {row.label} + + {row.label ?? ''} + {row.message} {row.data && (