diff --git a/package-lock.json b/package-lock.json index b446528d17..28e3268bd5 100644 --- a/package-lock.json +++ b/package-lock.json @@ -43,6 +43,7 @@ "pino": "8.7.0", "pino-abstract-transport": "1.0.0", "pino-pretty": "9.1.1", + "pino-roll": "1.0.0-rc.1", "proxy-agent": "5.0.0", "selfsigned": "2.1.1", "sprintf-js": "1.1.2", @@ -18245,6 +18246,22 @@ "node": "^12.22.0 || ^14.17.0 || >=16.0.0" } }, + "node_modules/pino-roll": { + "version": "1.0.0-rc.1", + "resolved": "https://registry.npmjs.org/pino-roll/-/pino-roll-1.0.0-rc.1.tgz", + "integrity": "sha512-wJUXdRMlbbUQkBT8C0ePwPxJpP9Eg2FKUfBAKv2ATsS/+ujtV64l/sLtdQcI+F+aAac0/1QjJOjuVyxUTDq5zA==", + "dependencies": { + "sonic-boom": "^2.8.0" + } + }, + "node_modules/pino-roll/node_modules/sonic-boom": { + "version": "2.8.0", + "resolved": "https://registry.npmjs.org/sonic-boom/-/sonic-boom-2.8.0.tgz", + "integrity": "sha512-kuonw1YOYYNOve5iHdSahXPOK49GqwA+LZhI6Wz/l0rP57iKyXXIHaRagOBHAPmGwJC6od2Z9zgvZ5loSgMlVg==", + "dependencies": { + "atomic-sleep": "^1.0.0" + } + }, "node_modules/pino-std-serializers": { "version": "6.0.0", "resolved": "https://registry.npmjs.org/pino-std-serializers/-/pino-std-serializers-6.0.0.tgz", @@ -35935,6 +35952,24 @@ } } }, + "pino-roll": { + "version": "1.0.0-rc.1", + "resolved": "https://registry.npmjs.org/pino-roll/-/pino-roll-1.0.0-rc.1.tgz", + "integrity": "sha512-wJUXdRMlbbUQkBT8C0ePwPxJpP9Eg2FKUfBAKv2ATsS/+ujtV64l/sLtdQcI+F+aAac0/1QjJOjuVyxUTDq5zA==", + "requires": { + "sonic-boom": "^2.8.0" + }, + "dependencies": { + "sonic-boom": { + "version": "2.8.0", + "resolved": "https://registry.npmjs.org/sonic-boom/-/sonic-boom-2.8.0.tgz", + "integrity": "sha512-kuonw1YOYYNOve5iHdSahXPOK49GqwA+LZhI6Wz/l0rP57iKyXXIHaRagOBHAPmGwJC6od2Z9zgvZ5loSgMlVg==", + "requires": { + "atomic-sleep": "^1.0.0" + } + } + } + }, "pino-std-serializers": { "version": "6.0.0", "resolved": "https://registry.npmjs.org/pino-std-serializers/-/pino-std-serializers-6.0.0.tgz", diff --git a/package.json b/package.json index 55b0bf369b..d586121f2e 100644 --- a/package.json +++ b/package.json @@ -74,6 +74,7 @@ "pino": "8.7.0", "pino-abstract-transport": "1.0.0", "pino-pretty": "9.1.1", + "pino-roll": "1.0.0-rc.1", "proxy-agent": "5.0.0", "selfsigned": "2.1.1", "sprintf-js": "1.1.2", diff --git a/src/frontend/engine/__snapshots__/engine.spec.jsx.snap b/src/frontend/engine/__snapshots__/engine.spec.jsx.snap index cfb6000319..9c75ead430 100644 --- a/src/frontend/engine/__snapshots__/engine.spec.jsx.snap +++ b/src/frontend/engine/__snapshots__/engine.spec.jsx.snap @@ -778,7 +778,7 @@ exports[`Engine check Engine 1`] = ` class="form-label" for="engine.logParameters.fileLog.maxSize" > - File max size + Max file size
- Maximum size of the log files (Bytes) + Maximum size of the log files (MB)
@@ -832,26 +832,6 @@ exports[`Engine check Engine 1`] = ` -
-
- - -
-
@@ -936,7 +916,7 @@ exports[`Engine check Engine 1`] = ` class="form-label" for="engine.logParameters.sqliteLog.maxNumberOfLogs" > - Database max size + Max number of logs - Value must be greater than 10000 + Value must be greater than 100000
- Max size of the sqlite database (Byte) + Maximum number of logs in the SQLite database
@@ -3761,7 +3741,7 @@ exports[`Engine check Engine when config has no proxies 1`] = ` class="form-label" for="engine.logParameters.fileLog.maxSize" > - File max size + Max file size
- Maximum size of the log files (Bytes) + Maximum size of the log files (MB)
@@ -3815,26 +3795,6 @@ exports[`Engine check Engine when config has no proxies 1`] = ` -
-
- - -
-
@@ -3919,7 +3879,7 @@ exports[`Engine check Engine when config has no proxies 1`] = ` class="form-label" for="engine.logParameters.sqliteLog.maxNumberOfLogs" > - Database max size + Max number of logs - Value must be greater than 10000 + Value must be greater than 100000
- Max size of the sqlite database (Byte) + Maximum number of logs in the SQLite database
@@ -6330,7 +6290,7 @@ exports[`Engine check change OIBus name 1`] = ` class="form-label" for="engine.logParameters.fileLog.maxSize" > - File max size + Max file size
- Maximum size of the log files (Bytes) + Maximum size of the log files (MB)
@@ -6384,26 +6344,6 @@ exports[`Engine check change OIBus name 1`] = ` -
-
- - -
-
@@ -6488,7 +6428,7 @@ exports[`Engine check change OIBus name 1`] = ` class="form-label" for="engine.logParameters.sqliteLog.maxNumberOfLogs" > - Database max size + Max number of logs - Value must be greater than 10000 + Value must be greater than 100000
- Max size of the sqlite database (Byte) + Maximum number of logs in the SQLite database
@@ -9313,7 +9253,7 @@ exports[`Engine check change password 1`] = ` class="form-label" for="engine.logParameters.fileLog.maxSize" > - File max size + Max file size
- Maximum size of the log files (Bytes) + Maximum size of the log files (MB)
@@ -9367,26 +9307,6 @@ exports[`Engine check change password 1`] = ` -
-
- - -
-
@@ -9471,7 +9391,7 @@ exports[`Engine check change password 1`] = ` class="form-label" for="engine.logParameters.sqliteLog.maxNumberOfLogs" > - Database max size + Max number of logs - Value must be greater than 10000 + Value must be greater than 100000
- Max size of the sqlite database (Byte) + Maximum number of logs in the SQLite database
@@ -12296,7 +12216,7 @@ exports[`Engine check change port 1`] = ` class="form-label" for="engine.logParameters.fileLog.maxSize" > - File max size + Max file size
- Maximum size of the log files (Bytes) + Maximum size of the log files (MB)
@@ -12350,26 +12270,6 @@ exports[`Engine check change port 1`] = ` -
-
- - -
-
@@ -12454,7 +12354,7 @@ exports[`Engine check change port 1`] = ` class="form-label" for="engine.logParameters.sqliteLog.maxNumberOfLogs" > - Database max size + Max number of logs - Value must be greater than 10000 + Value must be greater than 100000
- Max size of the sqlite database (Byte) + Maximum number of logs in the SQLite database
@@ -15279,7 +15179,7 @@ exports[`Engine check change user 1`] = ` class="form-label" for="engine.logParameters.fileLog.maxSize" > - File max size + Max file size
- Maximum size of the log files (Bytes) + Maximum size of the log files (MB)
@@ -15333,26 +15233,6 @@ exports[`Engine check change user 1`] = ` -
-
- - -
-
@@ -15437,7 +15317,7 @@ exports[`Engine check change user 1`] = ` class="form-label" for="engine.logParameters.sqliteLog.maxNumberOfLogs" > - Database max size + Max number of logs - Value must be greater than 10000 + Value must be greater than 100000
- Max size of the sqlite database (Byte) + Maximum number of logs in the SQLite database
diff --git a/src/frontend/engine/logging/__snapshots__/file-logging.spec.jsx.snap b/src/frontend/engine/logging/__snapshots__/file-logging.spec.jsx.snap index 04da71774f..748703c896 100644 --- a/src/frontend/engine/logging/__snapshots__/file-logging.spec.jsx.snap +++ b/src/frontend/engine/logging/__snapshots__/file-logging.spec.jsx.snap @@ -84,7 +84,7 @@ exports[`FileLogging check FileLogging 1`] = ` class="form-label" for="engine.logParameters.fileLog.maxSize" > - File max size + Max file size
- Maximum size of the log files (Bytes) + Maximum size of the log files (MB)
@@ -138,26 +138,6 @@ exports[`FileLogging check FileLogging 1`] = ` -
-
- - -
-
@@ -247,7 +227,7 @@ exports[`FileLogging check change file level to "warning" 1`] = ` class="form-label" for="engine.logParameters.fileLog.maxSize" > - File max size + Max file size
- Maximum size of the log files (Bytes) + Maximum size of the log files (MB)
@@ -301,26 +281,6 @@ exports[`FileLogging check change file level to "warning" 1`] = ` -
-
- - -
-
@@ -410,7 +370,7 @@ exports[`FileLogging check change fileLog maxSize 1000 1`] = ` class="form-label" for="engine.logParameters.fileLog.maxSize" > - File max size + Max file size
- Maximum size of the log files (Bytes) + Maximum size of the log files (MB)
@@ -464,26 +424,6 @@ exports[`FileLogging check change fileLog maxSize 1000 1`] = ` -
-
- - -
-
@@ -573,170 +513,7 @@ exports[`FileLogging check change fileLog numberOfFiles to 1 1`] = ` class="form-label" for="engine.logParameters.fileLog.maxSize" > - File max size - - -
- -
- Maximum size of the log files (Bytes) -
-
-
- -
-
- - -
- -
- The number of log files (rotating) -
-
-
-
-
-
- - -
-
-
- - -`; - -exports[`FileLogging check change fileLog tailable to false 1`] = ` -
-
-
- File -
-
-
-
- - -
- -
- The level for the File log -
-
-
-
-
-
-
-
-
- Maximum size of the log files (Bytes) + Maximum size of the log files (MB)
@@ -790,26 +567,6 @@ exports[`FileLogging check change fileLog tailable to false 1`] = `
-
-
- - -
-
diff --git a/src/frontend/engine/logging/__snapshots__/logging.spec.jsx.snap b/src/frontend/engine/logging/__snapshots__/logging.spec.jsx.snap index d55aeef53c..3018024bf7 100644 --- a/src/frontend/engine/logging/__snapshots__/logging.spec.jsx.snap +++ b/src/frontend/engine/logging/__snapshots__/logging.spec.jsx.snap @@ -291,7 +291,7 @@ exports[`Logging check Logging 1`] = ` class="form-label" for="engine.logParameters.fileLog.maxSize" > - File max size + Max file size
- Maximum size of the log files (Bytes) + Maximum size of the log files (MB)
@@ -345,26 +345,6 @@ exports[`Logging check Logging 1`] = ` -
-
- - -
-
@@ -449,7 +429,7 @@ exports[`Logging check Logging 1`] = ` class="form-label" for="engine.logParameters.sqliteLog.maxNumberOfLogs" > - Database max size + Max number of logs - Value must be greater than 10000 + Value must be greater than 100000
- Max size of the sqlite database (Byte) + Maximum number of logs in the SQLite database
diff --git a/src/frontend/engine/logging/__snapshots__/sqlite-logging.spec.jsx.snap b/src/frontend/engine/logging/__snapshots__/sqlite-logging.spec.jsx.snap index 2baad9980f..4f6c4547c4 100644 --- a/src/frontend/engine/logging/__snapshots__/sqlite-logging.spec.jsx.snap +++ b/src/frontend/engine/logging/__snapshots__/sqlite-logging.spec.jsx.snap @@ -84,7 +84,7 @@ exports[`SqliteLogging check SqliteLogging 1`] = ` class="form-label" for="engine.logParameters.sqliteLog.maxNumberOfLogs" > - Database max size + Max number of logs - Value must be greater than 10000 + Value must be greater than 100000
- Max size of the sqlite database (Byte) + Maximum number of logs in the SQLite database
@@ -197,7 +197,7 @@ exports[`SqliteLogging check change sqliteLevel to "warning" 1`] = ` class="form-label" for="engine.logParameters.sqliteLog.maxNumberOfLogs" > - Database max size + Max number of logs - Value must be greater than 10000 + Value must be greater than 100000
- Max size of the sqlite database (Byte) + Maximum number of logs in the SQLite database
@@ -310,7 +310,7 @@ exports[`SqliteLogging check change sqliteLog maxNumberOfLogs to 10000000 1`] = class="form-label" for="engine.logParameters.sqliteLog.maxNumberOfLogs" > - Database max size + Max number of logs - Value must be greater than 10000 + Value must be greater than 100000
- Max size of the sqlite database (Byte) + Maximum number of logs in the SQLite database
diff --git a/src/frontend/engine/logging/file-logging.jsx b/src/frontend/engine/logging/file-logging.jsx index 15931bfee6..2f2ca4975b 100644 --- a/src/frontend/engine/logging/file-logging.jsx +++ b/src/frontend/engine/logging/file-logging.jsx @@ -15,11 +15,11 @@ schema.form = { maxSize: { type: 'OibInteger', newRow: false, - label: 'File max size', + label: 'Max file size', md: 2, - valid: minValue(10000), - defaultValue: 100000, - help:
Maximum size of the log files (Bytes)
, + valid: minValue(1), + defaultValue: 1, + help:
Maximum size of the log files (MB)
, }, numberOfFiles: { type: 'OibInteger', @@ -30,13 +30,6 @@ schema.form = { defaultValue: 5, help:
The number of log files (rotating)
, }, - tailable: { - type: 'OibCheckbox', - newRow: false, - md: 3, - label: 'Tailable', - defaultValue: true, - }, } const FileLogging = ({ logParameters, onChange }) => ( diff --git a/src/frontend/engine/logging/file-logging.spec.jsx b/src/frontend/engine/logging/file-logging.spec.jsx index dbfbf7f03b..14036c37f1 100644 --- a/src/frontend/engine/logging/file-logging.spec.jsx +++ b/src/frontend/engine/logging/file-logging.spec.jsx @@ -73,15 +73,4 @@ describe('FileLogging', () => { expect(onChange).toBeCalledWith('engine.logParameters.fileLog.numberOfFiles', 1, null) expect(container).toMatchSnapshot() }) - test('check change fileLog tailable to false', () => { - act(() => { - root.render() - }) - Simulate.change(document.getElementById('engine.logParameters.fileLog.tailable'), { target: { checked: false } }) - expect(onChange).toBeCalledWith('engine.logParameters.fileLog.tailable', false, null) - expect(container).toMatchSnapshot() - }) }) diff --git a/src/frontend/engine/logging/sqlite-logging.jsx b/src/frontend/engine/logging/sqlite-logging.jsx index 2010788fe2..f869b006d3 100644 --- a/src/frontend/engine/logging/sqlite-logging.jsx +++ b/src/frontend/engine/logging/sqlite-logging.jsx @@ -16,10 +16,10 @@ schema.form = { type: 'OibInteger', newRow: false, md: 2, - label: 'Database max size', - valid: minValue(10000), + label: 'Max number of logs', + valid: minValue(100000), defaultValue: 1000000, - help:
Max size of the sqlite database (Byte)
, + help:
Maximum number of logs in the SQLite database
, }, } diff --git a/src/migration/migration-rules.js b/src/migration/migration-rules.js index bae0003010..1d2be5700e 100644 --- a/src/migration/migration-rules.js +++ b/src/migration/migration-rules.js @@ -1718,5 +1718,20 @@ module.exports = { logger.info('Renaming engineName into name.') config.engine.name = config.engine.engineName delete config.engine.engineName + + logger.info('Removing tailable field in file log') + delete config.engine.logParameters.fileLog.tailable + + logger.info('Changing file size limit unit from Byte to MByte') + if (config.engine.logParameters.fileLog.maxSize <= 1000000) { + config.engine.logParameters.fileLog.maxSize = 1 + } else { + config.engine.logParameters.fileLog.maxSize = Math.round(config.engine.logParameters.fileLog.maxSize / 1000000) + } + + if (config.engine.logParameters.sqliteLog.maxNumberOfLogs <= 100000) { + logger.info('Changing minimum number of logs in SQLite database') + config.engine.logParameters.sqliteLog.maxNumberOfLogs = 100000 + } }, } diff --git a/src/service/logger/logger.service.js b/src/service/logger/logger.service.js index 6cabbc1f62..a43ededba0 100644 --- a/src/service/logger/logger.service.js +++ b/src/service/logger/logger.service.js @@ -71,8 +71,16 @@ class LoggerService { if (fileLog.level !== 'none') { const fileName = fileLog.fileName ? fileLog.fileName : path.resolve(LOG_FOLDER_NAME, LOG_FILE_NAME) - - targets.push({ target: 'pino/file', options: { destination: fileName, mkdir: true }, level: fileLog.level }) + // TODO: add number of files in pino-roll + targets.push({ + target: 'pino-roll', + options: { + file: fileName, + size: fileLog.maxSize, + frequency: 'daily', + }, + level: fileLog.level, + }) } if (sqliteLog.level !== 'none') { diff --git a/src/service/logger/logger.service.spec.js b/src/service/logger/logger.service.spec.js index 81928145fa..b5f3352d37 100644 --- a/src/service/logger/logger.service.spec.js +++ b/src/service/logger/logger.service.spec.js @@ -50,10 +50,11 @@ describe('Logger', () => { const expectedTargets = [ { target: 'pino-pretty', options: { colorize: true, singleLine: true }, level: settings.logParameters.consoleLog.level }, { - target: 'pino/file', + target: 'pino-roll', options: { - destination: settings.logParameters.fileLog.fileName, - mkdir: true, + file: settings.logParameters.fileLog.fileName, + frequency: 'daily', + size: 1000000, }, level: settings.logParameters.fileLog.level, }, @@ -119,10 +120,11 @@ describe('Logger', () => { const expectedTargets = [ { target: 'pino-pretty', options: { colorize: true, singleLine: true }, level: specificParameters.consoleLevel }, { - target: 'pino/file', + target: 'pino-roll', options: { - destination: settings.logParameters.fileLog.fileName, - mkdir: true, + file: settings.logParameters.fileLog.fileName, + frequency: 'daily', + size: 1000000, }, level: specificParameters.fileLevel, },