From 890de53b0a27a9268f3574ca1bbd3712b52903d1 Mon Sep 17 00:00:00 2001 From: Johannes Zellner Date: Wed, 15 May 2024 13:17:02 +0200 Subject: [PATCH] syslog: handle potential multiline syslog input --- package-lock.json | 10 +++++----- package.json | 2 +- syslog.js | 32 +++++++++++++++++++------------- 3 files changed, 25 insertions(+), 19 deletions(-) diff --git a/package-lock.json b/package-lock.json index 175ea454c..bf124c75e 100644 --- a/package-lock.json +++ b/package-lock.json @@ -38,7 +38,7 @@ "multiparty": "^4.2.3", "mysql": "^2.18.1", "nodemailer": "^6.9.13", - "nsyslog-parser": "^0.10.1", + "nsyslog-parser-2": "^0.9.11", "oidc-provider": "^8.4.5", "ovh": "^2.0.3", "qrcode": "^1.5.3", @@ -4100,10 +4100,10 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/nsyslog-parser": { - "version": "0.10.1", - "resolved": "https://registry.npmjs.org/nsyslog-parser/-/nsyslog-parser-0.10.1.tgz", - "integrity": "sha512-38XUyNf4j1nDXCpPIcGLxNxGceBUpSv06wQgcY3niZ7bydIDvyWr779Cx3RMjWpgib02hjueDUp84S15C9s5lQ==" + "node_modules/nsyslog-parser-2": { + "version": "0.9.11", + "resolved": "https://registry.npmjs.org/nsyslog-parser-2/-/nsyslog-parser-2-0.9.11.tgz", + "integrity": "sha512-QF13YP12BAA38NOWescMjiEoyJtnRV5k++fYOP8kNqKFtCubv1w73W9UhjCeER4l87M+4CWlm3MJcD5ZbgDJAg==" }, "node_modules/nwsapi": { "version": "2.2.7", diff --git a/package.json b/package.json index 466f5f5d6..7837a2abe 100644 --- a/package.json +++ b/package.json @@ -46,7 +46,7 @@ "multiparty": "^4.2.3", "mysql": "^2.18.1", "nodemailer": "^6.9.13", - "nsyslog-parser": "^0.10.1", + "nsyslog-parser-2": "^0.9.11", "oidc-provider": "^8.4.5", "ovh": "^2.0.3", "qrcode": "^1.5.3", diff --git a/syslog.js b/syslog.js index 64a5a3e58..05327fb04 100755 --- a/syslog.js +++ b/syslog.js @@ -12,7 +12,7 @@ const debug = require('debug')('syslog:server'), net = require('net'), path = require('path'), paths = require('./src/paths.js'), - parser = require('nsyslog-parser'), + parser = require('nsyslog-parser-2'), util = require('util'); let gServer = null; @@ -30,22 +30,28 @@ async function start() { gServer.on('connection', function (socket) { socket.on('data', function (msg) { - const info = parser(msg.toString()); + const lines = msg.toString().split('\n'); // may be multiline data - if (!info || !info.appName) return debug('Ignore unknown app log:', msg.toString()); + lines.forEach(function (msg) { + if (!msg) return; - // remove line breaks to avoid holes in the log file - // we do not ignore empty log lines, to allow gaps for potential ease of readability - const message = info.message.replace(/\n/g, ''); + const info = parser(msg); - const appLogDir = path.join(paths.LOG_DIR, info.appName); + if (!info || !info.appName) return debug('Ignore unknown app log:', msg); - try { - fs.mkdirSync(appLogDir, { recursive: true }); - fs.appendFileSync(`${appLogDir}/app.log`, info.ts.toISOString() + ' ' + message + '\n'); - } catch (error) { - console.error(error); - } + // remove line breaks to avoid holes in the log file + // we do not ignore empty log lines, to allow gaps for potential ease of readability + const message = info.message.replace(/\n/g, ''); + + const appLogDir = path.join(paths.LOG_DIR, info.appName); + + try { + fs.mkdirSync(appLogDir, { recursive: true }); + fs.appendFileSync(`${appLogDir}/app.log`, info.ts.toISOString() + ' ' + message + '\n'); + } catch (error) { + console.error(error); + } + }); }); socket.on('error', function (error) {