diff --git a/server.js b/server.js index 9decbf8..1fdd2b7 100644 --- a/server.js +++ b/server.js @@ -105,15 +105,30 @@ function parseLogLines(data) { logLines.forEach((line, index) => { if (line.trim() !== '') { try { - let unescapedLine = line.replace(/\\"/g, '"'); - unescapedLine = unescapedLine.replace(/\\n/g, '\n'); - unescapedLine = unescapedLine.replace(/\\t/g, '\t'); - unescapedLine = unescapedLine.replace(/\\r/g, '\r'); - unescapedLine = unescapedLine.replace(/\\'/g, '\''); - unescapedLine = unescapedLine.replace(/\\&/g, '&'); - unescapedLine = unescapedLine.replace(/\\b/g, '\b'); - unescapedLine = unescapedLine.replace(/\\f/g, '\f'); - const parsedLog = JSON.parse(unescapedLine, (key, value) => { + // Transform the custom log format into a valid JSON string + let jsonLine = line.trim() + .replace(/=\{/g, ':{') // Replace ={ with :{ + .replace(/\}([,}])/g, '}$1') // Replace } with } at the end of objects + .replace(/=/g, '":') // Replace = with ": + .replace(/,(\S)/g, ',"$1') // Replace , with ," to separate fields + .replace(/(\w+):/g, '"$1":') // Add quotes around field names + .replace(/"(\w+)":{/g, '"$1":\{') // Ensure that nested objects have correct format + .replace(/(\w+)"(\w+)":/g, '$1"$2":') // Fix fields that may have been incorrectly split + .replace(/""/g, '\\"') // Escape double quotes inside strings + .replace(/(\w+):"/g, '"$1":"') // Ensure that all values are enclosed in double quotes + .replace(/(\w+)"(\w+)"/g, '$1"$2"') // Fix values that may have been incorrectly split + .replace(/""/g, '"'); // Remove any double double-quotes introduced by previous replacements + + // Parse the transformed JSON string + const parsedLog = JSON.parse('{' + jsonLine + '}'); + validLogs.push(parsedLog); + } catch (parseError) { + console.error(`Error parsing log line at index ${index}: ${parseError.message}`); + } + } + }); + + return validLogs; if (typeof value === 'string') { try { return JSON.parse(value);