Skip to content

Commit 532858f

Browse files
committed
Optional Timestamp in logs
1 parent 6242b39 commit 532858f

File tree

10 files changed

+277
-206
lines changed

10 files changed

+277
-206
lines changed

.gitignore

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -315,6 +315,7 @@ $RECYCLE.BIN/
315315
.vscode
316316

317317
*.js
318+
!src/helpers.js
318319

319320
*.d.ts
320321

CHANGELOG.md

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,11 @@ All notable changes to this project will be documented in this file.
55
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/), and this project adheres
66
to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
77

8+
## [1.3.0]
9+
10+
### Added
11+
- Optional Timestamp in logs
12+
813
## [1.0.0]
914

1015
### Official release

README.md

Lines changed: 13 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -58,9 +58,19 @@ Parameters
5858
let LOGGER_DEBUG_COLOR = process.env.LOGGER_DEBUG_COLOR || '4'
5959
let LOGGER_ERROR_COLOR = process.env.LOGGER_ERROR_COLOR || '9'
6060
let LOGGER_TRACE_COLOR = process.env.LOGGER_TRACE_COLOR || '15'
61-
let LOGGER_DEBUG_ENABLED = (process.env.LOGGER_DEBUG_ENABLED === 'true') || false
62-
let LOGGER_ERROR_ENABLED = (process.env.LOGGER_ERROR_ENABLED === 'true') || true
63-
let LOGGER_TRACE_ENABLED = (process.env.LOGGER_TRACE_ENABLED === 'true') || false
61+
62+
let LOGGER_DEBUG_ENABLED =
63+
process.env.LOGGER_DEBUG_ENABLED &&
64+
process.env.LOGGER_DEBUG_ENABLED === 'true'
65+
let LOGGER_ERROR_ENABLED =
66+
(process.env.LOGGER_ERROR_ENABLED &&
67+
process.env.LOGGER_ERROR_ENABLED === 'true') ||
68+
true
69+
let LOGGER_TRACE_ENABLED =
70+
process.env.LOGGER_TRACE_ENABLED &&
71+
process.env.LOGGER_TRACE_ENABLED === 'true'
72+
73+
let LOGGER_TIMESTAMP_ENABLED = process.env.LOGGER_TIMESTAMP_ENABLED || false
6474
```
6575

6676
Colors are defined via numbers. Depending on which device you are running your app different range of colors will be

package.json

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,14 @@
11
{
22
"name": "@nrchkb/logger",
3-
"version": "1.2.0",
3+
"version": "1.3.0",
44
"description": "Unified Logger for Node-RED nodes (using debug)",
55
"main": "src/index.js",
66
"scripts": {
77
"build": "tsc",
88
"test": "yarn build && cross-env DEBUG=LOGGER* mocha -r ts-node/register './src/**/*.test.[tj]s' --exit",
99
"prettier": "prettier --write \"src/**/*.{js,ts}\"",
10-
"lint": "eslint src/**/*.{js,ts} --fix"
10+
"lint": "eslint src/**/*.{js,ts} --fix",
11+
"husky-run": "lint-staged"
1112
},
1213
"repository": {
1314
"type": "git",
@@ -37,14 +38,14 @@
3738
"@typescript-eslint/parser": "^4.15.0",
3839
"babel-eslint": "^10.1.0",
3940
"cross-env": "^7.0.3",
40-
"eslint": "^7.19.0",
41+
"eslint": "^7.20.0",
4142
"eslint-config-prettier": "^7.2.0",
4243
"eslint-plugin-prettier": "^3.3.1",
4344
"husky": "^5.0.9",
4445
"lint-staged": "^10.5.4",
45-
"mocha": "^8.2.1",
46+
"mocha": "^8.3.0",
4647
"node-red": "^1.2.9",
47-
"node-red-node-test-helper": "^0.2.6",
48+
"node-red-node-test-helper": "^0.2.7",
4849
"prettier": "^2.2.1",
4950
"ts-node": "^9.1.1",
5051
"typescript": "^4.1.5"

src/helpers.js

Lines changed: 52 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,52 @@
1+
const namespaces = []
2+
3+
const setTimestamp = (
4+
debug,
5+
LOGGER_TIMESTAMP_ENABLED,
6+
namespacePrefix,
7+
namespace = ''
8+
) => {
9+
if (LOGGER_TIMESTAMP_ENABLED) {
10+
namespaces.push(
11+
namespacePrefix,
12+
namespacePrefix + '-Trace',
13+
namespacePrefix + '-Error',
14+
namespacePrefix + ':',
15+
namespacePrefix + '-Trace:',
16+
namespacePrefix + '-Error:',
17+
namespacePrefix + ':' + namespace,
18+
namespacePrefix + '-Trace:' + namespace,
19+
namespacePrefix + '-Error:' + namespace
20+
)
21+
}
22+
23+
debug.formatArgs = function (args) {
24+
const { namespace: name, useColors } = this
25+
26+
if (useColors) {
27+
const timestamp = namespaces.includes(this?.namespace)
28+
? new Date().toLocaleString('en-GB', {
29+
day: '2-digit',
30+
month: 'short',
31+
hour: 'numeric',
32+
minute: 'numeric',
33+
second: 'numeric',
34+
}) + ' '
35+
: ' '
36+
37+
const c = this.color
38+
const colorCode = '\u001B[3' + (c < 8 ? c : '8;5;' + c)
39+
const prefix = `${colorCode};1m${name} \u001B[0m`
40+
41+
args[0] =
42+
timestamp + prefix + args[0].split('\n').join('\n' + prefix)
43+
args.push(
44+
colorCode + 'm+' + debug.humanize(this.diff) + '\u001B[0m'
45+
)
46+
} else {
47+
args[0] = getDate() + name + ' ' + args[0]
48+
}
49+
}
50+
}
51+
52+
module.exports = { setTimestamp }

src/index.ts

Lines changed: 28 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,8 @@ import Debug from 'debug'
22
import { Node } from 'node-red'
33
import { CallbackType, Logger, LoggerSetupData } from './types'
44

5+
const helpers = require('./helpers')
6+
57
let LOGGER_DEBUG_COLOR = process.env.LOGGER_DEBUG_COLOR || '4'
68
let LOGGER_ERROR_COLOR = process.env.LOGGER_ERROR_COLOR || '9'
79
let LOGGER_TRACE_COLOR = process.env.LOGGER_TRACE_COLOR || '15'
@@ -16,37 +18,50 @@ let LOGGER_TRACE_ENABLED =
1618
process.env.LOGGER_TRACE_ENABLED &&
1719
process.env.LOGGER_TRACE_ENABLED === 'true'
1820

21+
let LOGGER_TIMESTAMP_ENABLED = process.env.LOGGER_TIMESTAMP_ENABLED || false
22+
1923
export const loggerSetup = ({
2024
debugColor,
2125
debugEnabled,
2226
errorColor,
2327
errorEnabled,
2428
traceColor,
2529
traceEnabled,
30+
timestampEnabled,
2631
}: LoggerSetupData): void => {
27-
if (debugColor) {
32+
if (debugColor !== undefined) {
2833
LOGGER_DEBUG_COLOR = debugColor
2934
}
3035

31-
if (debugEnabled) {
36+
if (debugEnabled !== undefined) {
3237
LOGGER_DEBUG_ENABLED = debugEnabled
3338
}
3439

35-
if (errorColor) {
40+
if (errorColor !== undefined) {
3641
LOGGER_ERROR_COLOR = errorColor
3742
}
3843

39-
if (errorEnabled) {
44+
if (errorEnabled !== undefined) {
4045
LOGGER_ERROR_ENABLED = errorEnabled
4146
}
4247

43-
if (traceColor) {
48+
if (traceColor !== undefined) {
4449
LOGGER_TRACE_COLOR = traceColor
4550
}
4651

47-
if (traceEnabled) {
52+
if (traceEnabled !== undefined) {
4853
LOGGER_TRACE_ENABLED = traceEnabled
4954
}
55+
56+
if (timestampEnabled !== undefined) {
57+
if (typeof timestampEnabled === 'boolean') {
58+
LOGGER_TIMESTAMP_ENABLED = timestampEnabled
59+
} else {
60+
timestampEnabled.split(',').forEach((n) => {
61+
helpers.setTimestamp(Debug, true, n)
62+
})
63+
}
64+
}
5065
}
5166

5267
const logMessage = (
@@ -71,6 +86,13 @@ export const logger: Logger = (
7186
messagePrefix,
7287
node?
7388
) => {
89+
helpers.setTimestamp(
90+
Debug,
91+
LOGGER_TIMESTAMP_ENABLED,
92+
namespacePrefix,
93+
namespace
94+
)
95+
7496
//DEBUG
7597
const debug = Debug(
7698
namespace ? `${namespacePrefix}:${namespace}` : namespacePrefix

src/test/logger.test.ts

Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -66,4 +66,41 @@ describe('Logger', function () {
6666

6767
done()
6868
})
69+
70+
it('set timestamp', function (done) {
71+
const { logger, loggerSetup } = require('../index')
72+
73+
loggerSetup({
74+
timestampEnabled: true,
75+
})
76+
77+
const log1 = logger('LOGGER_TIMESTAMP')
78+
79+
log1.debug('Red')
80+
log1.error('Green')
81+
log1.trace('Yellow')
82+
83+
loggerSetup({
84+
timestampEnabled: false,
85+
})
86+
87+
loggerSetup({
88+
timestampEnabled:
89+
'LOGGER_TIMESTAMP_CHECK_1,LOGGER_TIMESTAMP_CHECK_2',
90+
})
91+
92+
const log2 = logger('LOGGER_TIMESTAMP_CHECK_1')
93+
94+
log2.debug('Red')
95+
log2.error('Green')
96+
log2.trace('Yellow')
97+
98+
const log3 = logger('LOGGER_TIMESTAMP_CHECK_2')
99+
100+
log3.debug('Red')
101+
log3.error('Green')
102+
log3.trace('Yellow')
103+
104+
done()
105+
})
69106
})

src/types.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@ export type LoggerSetupData = {
1717
errorEnabled?: boolean
1818
traceColor?: string
1919
traceEnabled?: boolean
20+
timestampEnabled?: boolean | string
2021
}
2122

2223
export type Logger = (

tsconfig.json

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,7 @@
3232
],
3333
"exclude": [
3434
"node_modules",
35-
"**/test/*"
35+
"**/test/*",
36+
"src/helpers.js"
3637
]
3738
}

0 commit comments

Comments
 (0)