diff --git a/package-lock.json b/package-lock.json index 9aff4c0f0f..64d8d76937 100644 --- a/package-lock.json +++ b/package-lock.json @@ -12454,8 +12454,9 @@ } }, "node_modules/object-hash": { - "version": "2.2.0", - "license": "MIT", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/object-hash/-/object-hash-3.0.0.tgz", + "integrity": "sha512-RSn9F68PjH9HqtltsSnqYC1XXoWe9Bju5+213R98cNGttag9q9yAOTzdbsqvIa7aNm5WffBZFpWYr2aWrklWAw==", "engines": { "node": ">= 6" } @@ -15897,8 +15898,12 @@ } }, "node_modules/triple-beam": { - "version": "1.3.0", - "license": "MIT" + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/triple-beam/-/triple-beam-1.4.1.tgz", + "integrity": "sha512-aZbgViZrg1QNcG+LULa7nhZpJTZSLm/mXnHXnbAbjmN5aSa0y7V+wvv6+4WaBtpISJzThKy+PIPxc1Nq1EJ9mg==", + "engines": { + "node": ">= 14.0.0" + } }, "node_modules/ts-api-utils": { "version": "1.0.1", @@ -17122,13 +17127,14 @@ } }, "node_modules/winston-daily-rotate-file": { - "version": "4.7.1", - "license": "MIT", + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/winston-daily-rotate-file/-/winston-daily-rotate-file-5.0.0.tgz", + "integrity": "sha512-JDjiXXkM5qvwY06733vf09I2wnMXpZEhxEVOSPenZMii+g7pcDcTBt2MRugnoi8BwVSuCT2jfRXBUy+n1Zz/Yw==", "dependencies": { "file-stream-rotator": "^0.6.1", - "object-hash": "^2.0.1", - "triple-beam": "^1.3.0", - "winston-transport": "^4.4.0" + "object-hash": "^3.0.0", + "triple-beam": "^1.4.1", + "winston-transport": "^4.7.0" }, "engines": { "node": ">=8" @@ -17169,15 +17175,16 @@ } }, "node_modules/winston-transport": { - "version": "4.5.0", - "license": "MIT", + "version": "4.7.0", + "resolved": "https://registry.npmjs.org/winston-transport/-/winston-transport-4.7.0.tgz", + "integrity": "sha512-ajBj65K5I7denzer2IYW6+2bNIVqLGDHqDw3Ow8Ohh+vdW+rv4MZ6eiDvHoKhfJFZ2auyN8byXieDDJ96ViONg==", "dependencies": { "logform": "^2.3.2", "readable-stream": "^3.6.0", "triple-beam": "^1.3.0" }, "engines": { - "node": ">= 6.4.0" + "node": ">= 12.0.0" } }, "node_modules/winston-transport/node_modules/readable-stream": { @@ -17690,7 +17697,7 @@ "semver": "^7.5.2", "triple-beam": "^1.3.0", "winston": "^3.7.2", - "winston-daily-rotate-file": "^4.7.1", + "winston-daily-rotate-file": "^5.0.0", "winston-transport": "^4.5.0" }, "engines": { @@ -18538,7 +18545,7 @@ "semver": "^7.5.2", "triple-beam": "^1.3.0", "winston": "^3.7.2", - "winston-daily-rotate-file": "^4.7.1", + "winston-daily-rotate-file": "^5.0.0", "winston-syslog": "^2.6.0", "winston-transport": "^4.5.0" } @@ -26909,7 +26916,9 @@ } }, "object-hash": { - "version": "2.2.0" + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/object-hash/-/object-hash-3.0.0.tgz", + "integrity": "sha512-RSn9F68PjH9HqtltsSnqYC1XXoWe9Bju5+213R98cNGttag9q9yAOTzdbsqvIa7aNm5WffBZFpWYr2aWrklWAw==" }, "object-keys": { "version": "1.1.1", @@ -29282,7 +29291,9 @@ "dev": true }, "triple-beam": { - "version": "1.3.0" + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/triple-beam/-/triple-beam-1.4.1.tgz", + "integrity": "sha512-aZbgViZrg1QNcG+LULa7nhZpJTZSLm/mXnHXnbAbjmN5aSa0y7V+wvv6+4WaBtpISJzThKy+PIPxc1Nq1EJ9mg==" }, "ts-api-utils": { "version": "1.0.1", @@ -30134,12 +30145,14 @@ } }, "winston-daily-rotate-file": { - "version": "4.7.1", + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/winston-daily-rotate-file/-/winston-daily-rotate-file-5.0.0.tgz", + "integrity": "sha512-JDjiXXkM5qvwY06733vf09I2wnMXpZEhxEVOSPenZMii+g7pcDcTBt2MRugnoi8BwVSuCT2jfRXBUy+n1Zz/Yw==", "requires": { "file-stream-rotator": "^0.6.1", - "object-hash": "^2.0.1", - "triple-beam": "^1.3.0", - "winston-transport": "^4.4.0" + "object-hash": "^3.0.0", + "triple-beam": "^1.4.1", + "winston-transport": "^4.7.0" } }, "winston-seq-updated": { @@ -30165,7 +30178,9 @@ } }, "winston-transport": { - "version": "4.5.0", + "version": "4.7.0", + "resolved": "https://registry.npmjs.org/winston-transport/-/winston-transport-4.7.0.tgz", + "integrity": "sha512-ajBj65K5I7denzer2IYW6+2bNIVqLGDHqDw3Ow8Ohh+vdW+rv4MZ6eiDvHoKhfJFZ2auyN8byXieDDJ96ViONg==", "requires": { "logform": "^2.3.2", "readable-stream": "^3.6.0", diff --git a/packages/common/package.json b/packages/common/package.json index 880df0beee..ebec16e931 100644 --- a/packages/common/package.json +++ b/packages/common/package.json @@ -24,7 +24,7 @@ "semver": "^7.5.2", "triple-beam": "^1.3.0", "winston": "^3.7.2", - "winston-daily-rotate-file": "^4.7.1", + "winston-daily-rotate-file": "^5.0.0", "winston-transport": "^4.5.0" }, "keywords": [ diff --git a/packages/common/src/lib/common/logger.ts b/packages/common/src/lib/common/logger.ts index 1619a4b0d2..95cd60ddc0 100644 --- a/packages/common/src/lib/common/logger.ts +++ b/packages/common/src/lib/common/logger.ts @@ -186,9 +186,7 @@ export function logger( if (userOptions.transport) { let fName = 0; const isWindows = os.platform().startsWith('win'); - Object.keys(userOptions.transport).forEach(f => { - const transport = userOptions.transport[f]; - + for (const transport of Object.values(userOptions.transport)) { transport._defaultConfigLoglevel = transport.level; // remember Loglevel if set transport.level = transport.level || level; @@ -251,6 +249,11 @@ export function logger( try { const _log = new DailyRotateFile(transport); + + _log.on('error', err => { + console.error(`Error on log file rotation: ${err.message}`); + }); + options.transports.push(_log); } catch (e) { if (e.code === 'EACCES') { @@ -262,7 +265,7 @@ export function logger( } else if (transport.type === 'syslog' && transport.enabled !== false) { if (!IoSysLog) { console.error('Syslog configured, but not installed! Ignore'); - return; + continue; } // host: The host running syslogd, defaults to localhost. // port: The port on the host that syslog is running on, defaults to syslogd's default port. @@ -287,8 +290,8 @@ export function logger( } try { options.transports.push(new IoSysLog(transport)); - } catch (err) { - console.log(`Cannot activate Syslog: ${err.message}`); + } catch (e) { + console.error(`Cannot activate Syslog: ${e.message}`); } } else if (transport.type === 'http' && transport.enabled !== false) { // host: (Default: localhost) Remote host of the HTTP logging endpoint @@ -302,8 +305,8 @@ export function logger( try { options.transports.push(new winston.transports.Http(transport)); - } catch (err) { - console.log(`Cannot activate HTTP: ${err.message}`); + } catch (e) { + console.error(`Cannot activate HTTP: ${e.message}`); } } else if (transport.type === 'stream' && transport.enabled !== false) { // stream: any Node.js stream. If an objectMode stream is provided then the entire info object will be written. Otherwise info[MESSAGE] will be written. @@ -318,18 +321,18 @@ export function logger( if (typeof transport.stream === 'string') { transport.stream = fs.createWriteStream(transport.stream); transport.stream.on('error', (err: Error) => { - console.log(`Error in Stream: ${err.message}`); + console.error(`Error in Stream: ${err.message}`); }); } options.transports.push(new winston.transports.Stream(transport)); - } catch (err) { - console.log(`Cannot activate Stream: ${err.message}`); + } catch (e) { + console.error(`Cannot activate Stream: ${e.message}`); } } else if (transport.type === 'seq' && transport.enabled !== false) { if (!IoSeq) { console.error('Seq configured, but not installed! Ignore'); - return; + continue; } // serverUrl?: string; // apiKey?: string; @@ -345,14 +348,14 @@ export function logger( }; const seqLogger = new IoSeq(transport); options.transports.push(seqLogger); - } catch (err) { - console.log(`Cannot activate SEQ: ${err.message}`); + } catch (e) { + console.error(`Cannot activate SEQ: ${e.message}`); } } else { - console.log('Cannot activate SEQ: No serverUrl specified'); + console.error('Cannot activate SEQ: No serverUrl specified'); } } - }); + } } } else { for (let i = 0; i < files.length; i++) { @@ -454,8 +457,8 @@ export function logger( try { /** @ts-expect-error we use undocumented stuff here TODO */ files = fs.readdirSync(transport.dirname); - } catch (err) { - console.log(`host.${hostname} Cannot read log directory: ${err}`); + } catch (e) { + console.error(`host.${hostname} Cannot read log directory: ${e.message}`); return; } const forXdays = new Date();