From 3ff4d8b29750234c2f3170371acd2cdbd0d6fd3f Mon Sep 17 00:00:00 2001 From: shayan tabatabaee Date: Fri, 15 Nov 2019 11:56:19 +0330 Subject: [PATCH] fix: Add pause event to dateFile logger --- lib/appenders/dateFile.js | 8 +++++++- test/tap/pause-test.js | 32 ++++++++++++++++++++++++++++++++ 2 files changed, 39 insertions(+), 1 deletion(-) diff --git a/lib/appenders/dateFile.js b/lib/appenders/dateFile.js index d4578c2..5ab8a03 100644 --- a/lib/appenders/dateFile.js +++ b/lib/appenders/dateFile.js @@ -28,8 +28,14 @@ function appender( options ); + logFile.on("drain", () => { + process.emit("log4js:pause", false); + }); + const app = function (logEvent) { - logFile.write(layout(logEvent, timezoneOffset) + eol, 'utf8'); + if (!logFile.write(layout(logEvent, timezoneOffset) + eol, "utf8")) { + process.emit("log4js:pause", true); + } }; app.shutdown = function (complete) { diff --git a/test/tap/pause-test.js b/test/tap/pause-test.js index f6db91c..e260040 100644 --- a/test/tap/pause-test.js +++ b/test/tap/pause-test.js @@ -33,5 +33,37 @@ tap.test("Drain event test", batch => { t.end(); }); + + batch.test("Should emit pause event and resume when logging in a date file with high frequency", (t) => { + // Generate date file logger with 5MB of highWaterMark config + log4js.configure({ + appenders: { + file: { type: "dateFile", filename: "logs/date-file-drain.log", highWaterMark: 5 * 1024 * 1024 } + }, + categories: { + default: { appenders: ["file"], level: "debug" } + } + }); + + let onPause = false; + let onResume = false; + + process.on("log4js:pause", value => { + if (value) { + onPause = true; + } else { + onResume = true; + } + }); + + const logger = log4js.getLogger(); + while (onPause === false && onResume === false) { + if (onPause === false) + logger.info("This is a test for emitting drain event in date file logger"); + } + t.end(); + + }); + batch.end(); });