From bedbc4152f984a2ad214b97f6cb809a0dd177e15 Mon Sep 17 00:00:00 2001 From: Lam Wei Li Date: Sun, 23 Jan 2022 20:34:05 +0800 Subject: [PATCH 1/2] refactor date pattern names for clarity (when %date actually means %datetime) --- docs/layouts.md | 2 +- lib/layouts.js | 30 +++++++++++++++++------- test/tap/layouts-test.js | 50 +++++++++++++++++++++++++++++----------- 3 files changed, 60 insertions(+), 22 deletions(-) diff --git a/docs/layouts.md b/docs/layouts.md index de967443..b2d2e456 100644 --- a/docs/layouts.md +++ b/docs/layouts.md @@ -116,7 +116,7 @@ Fields can be any of: * `%c` log category * `%h` hostname * `%m` log data -* `%d` date, formatted - default is `ISO8601`, format options are: `ISO8601`, `ISO8601_WITH_TZ_OFFSET`, `ABSOLUTE`, `DATE`, or any string compatible with the [date-format](https://www.npmjs.com/package/date-format) library. e.g. `%d{DATE}`, `%d{yyyy/MM/dd-hh.mm.ss}` +* `%d` date, formatted - default is `ISO8601`, format options are: `ISO8601`, `ISO8601_WITH_TZ_OFFSET`, `ABSOLUTETIME`, `DATETIME`, or any string compatible with the [date-format](https://www.npmjs.com/package/date-format) library. e.g. `%d{DATETIME}`, `%d{yyyy/MM/dd-hh.mm.ss}` * `%%` % - for when you want a literal `%` in your output * `%n` newline * `%z` process id (from `process.pid`) diff --git a/lib/layouts.js b/lib/layouts.js index ab203e53..6cf412d1 100644 --- a/lib/layouts.js +++ b/lib/layouts.js @@ -2,6 +2,7 @@ const dateFormat = require('date-format'); const os = require('os'); const util = require('util'); const path = require('path'); +const debug = require('debug')('log4js:layouts'); const styles = { // styles @@ -144,14 +145,27 @@ function patternLayout(pattern, tokens) { if (specifier) { format = specifier; // Pick up special cases - if (format === 'ISO8601') { - format = dateFormat.ISO8601_FORMAT; - } else if (format === 'ISO8601_WITH_TZ_OFFSET') { - format = dateFormat.ISO8601_WITH_TZ_OFFSET_FORMAT; - } else if (format === 'ABSOLUTE') { - format = dateFormat.ABSOLUTETIME_FORMAT; - } else if (format === 'DATE') { - format = dateFormat.DATETIME_FORMAT; + switch (format) { + case 'ISO8601': + case 'ISO8601_FORMAT': + format = dateFormat.ISO8601_FORMAT; + break; + case 'ISO8601_WITH_TZ_OFFSET': + case 'ISO8601_WITH_TZ_OFFSET_FORMAT': + format = dateFormat.ISO8601_WITH_TZ_OFFSET_FORMAT; + break; + case 'ABSOLUTE': + debug("DEPRECATION: Pattern %d{ABSOLUTE} is deprecated and replaced by %d{ABSOLUTETIME}."); + case 'ABSOLUTETIME': + case 'ABSOLUTETIME_FORMAT': + format = dateFormat.ABSOLUTETIME_FORMAT; + break; + case 'DATE': + debug("DEPRECATION: Pattern %d{DATE} is deprecated and replaced by %d{DATETIME}."); + case 'DATETIME': + case 'DATETIME_FORMAT': + format = dateFormat.DATETIME_FORMAT; + break; } } // Format the date diff --git a/test/tap/layouts-test.js b/test/tap/layouts-test.js index 70b8ba8d..f2f18433 100644 --- a/test/tap/layouts-test.js +++ b/test/tap/layouts-test.js @@ -412,23 +412,21 @@ test("log4js layouts", batch => { "2010-12-05T14:18:30.045" ); - // Commenting this test out, because it does not work in travis - // for reasons I do not understand. - // testPattern( - // assert, - // layout, - // event, - // tokens, - // "%d{ISO8601_WITH_TZ_OFFSET}", - // "2010-12-05T03:18:30.045+1000" - // ); + testPattern( + assert, + layout, + event, + tokens, + "%d{ISO8601_WITH_TZ_OFFSET}", + "2010-12-05T14:18:30.045+10:00" + ); testPattern( assert, layout, event, tokens, - "%d{ABSOLUTE}", + "%d{ABSOLUTE}", // deprecated "14:18:30.045" ); testPattern( @@ -436,9 +434,27 @@ test("log4js layouts", batch => { layout, event, tokens, - "%d{DATE}", + "%d{ABSOLUTETIME}", + "14:18:30.045" + ); + + testPattern( + assert, + layout, + event, + tokens, + "%d{DATE}", // deprecated "05 12 2010 14:18:30.045" ); + testPattern( + assert, + layout, + event, + tokens, + "%d{DATETIME}", + "05 12 2010 14:18:30.045" + ); + testPattern( assert, layout, @@ -617,7 +633,15 @@ test("log4js layouts", batch => { layout, event, tokens, - "%m%n %c{2} at %d{ABSOLUTE} cheese %p%n", + "%m%n %c{2} at %d{ABSOLUTE} cheese %p%n", // deprecated + `this is a test${EOL} of.tests at 14:18:30.045 cheese DEBUG${EOL}` + ); + testPattern( + assert, + layout, + event, + tokens, + "%m%n %c{2} at %d{ABSOLUTETIME} cheese %p%n", `this is a test${EOL} of.tests at 14:18:30.045 cheese DEBUG${EOL}` ); assert.end(); From 26ed377d6cd80882ba74fb0793d780a1a795bae4 Mon Sep 17 00:00:00 2001 From: Lam Wei Li Date: Sun, 23 Jan 2022 21:09:32 +0800 Subject: [PATCH 2/2] fixed eslint --- lib/layouts.js | 3 +++ 1 file changed, 3 insertions(+) diff --git a/lib/layouts.js b/lib/layouts.js index 6cf412d1..76231faf 100644 --- a/lib/layouts.js +++ b/lib/layouts.js @@ -156,16 +156,19 @@ function patternLayout(pattern, tokens) { break; case 'ABSOLUTE': debug("DEPRECATION: Pattern %d{ABSOLUTE} is deprecated and replaced by %d{ABSOLUTETIME}."); + // falls through case 'ABSOLUTETIME': case 'ABSOLUTETIME_FORMAT': format = dateFormat.ABSOLUTETIME_FORMAT; break; case 'DATE': debug("DEPRECATION: Pattern %d{DATE} is deprecated and replaced by %d{DATETIME}."); + // falls through case 'DATETIME': case 'DATETIME_FORMAT': format = dateFormat.DATETIME_FORMAT; break; + // no default } } // Format the date