diff --git a/libraries/logger/logging-manager.js b/libraries/logger/logging-manager.js index 6c6912444f..56ef50203e 100644 --- a/libraries/logger/logging-manager.js +++ b/libraries/logger/logging-manager.js @@ -1,4 +1,5 @@ const Stream = require('node:stream') +const { setTimeout } = require('node:timers/promises') const bunyan = require('bunyan') const GCPManager = require('./gcp-manager') const Serializers = require('./serializers') @@ -11,6 +12,9 @@ const { setLogger: setValidationToolsLogger, } = require('@overleaf/validation-tools') +// Delay (ms) before exiting to allow final logs to be flushed. +const EXIT_DELAY = 500 + const LoggingManager = { /** * @param {string} name - The name of the logger @@ -100,6 +104,16 @@ const LoggingManager = { this.logger.fatal(attributes, message) }, + /** + * Exit after a delay to ensure that log messages are flushed + * @param {number} code + */ + + async exit(code) { + await setTimeout(EXIT_DELAY) + process.exit(code) + }, + _getOutputStreamConfig() { switch (process.env.LOGGING_FORMAT) { case 'gke': {