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 8e73758..7db8a57 100644 --- a/test/tap/pause-test.js +++ b/test/tap/pause-test.js @@ -34,5 +34,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(); });