Skip to content

Commit c5d71e9

Browse files
authored
Merge pull request #1386 from gabriel-cloud/gabriel-cloud/issue1385
add maxLength to recording - closes #1385
2 parents 26dcec6 + 4dc786e commit c5d71e9

File tree

3 files changed

+73
-22
lines changed

3 files changed

+73
-22
lines changed

docs/recording.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ This appender stores the log events in memory. It is mainly useful for testing (
55
## Configuration
66

77
- `type` - `recording`
8+
- `maxLength` - `integer` (optional, defaults to undefined) - the maximum array length for the recording. If not specified, the array will grow until cleared
89

910
There is no other configuration for this appender.
1011

lib/appenders/recording.js

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,12 +2,15 @@ const debug = require('debug')('log4js:recording');
22

33
const recordedEvents = [];
44

5-
function configure() {
5+
function configure(config) {
66
return function (logEvent) {
77
debug(
88
`received logEvent, number of events now ${recordedEvents.length + 1}`
99
);
1010
debug('log event was ', logEvent);
11+
if (config.maxLength && recordedEvents.length >= config.maxLength) {
12+
recordedEvents.shift();
13+
}
1114
recordedEvents.push(logEvent);
1215
};
1316
}

test/tap/recordingAppender-test.js

Lines changed: 68 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -1,32 +1,79 @@
11
const { test } = require('tap');
22
const log4js = require('../../lib/log4js');
33

4-
test('recording appender', (t) => {
5-
log4js.configure({
6-
appenders: { rec: { type: 'recording' } },
7-
categories: { default: { appenders: ['rec'], level: 'debug' } },
4+
test('recording appender', (batch) => {
5+
batch.test('should store logs in memory until cleared', (t) => {
6+
log4js.configure({
7+
appenders: { rec: { type: 'recording' } },
8+
categories: { default: { appenders: ['rec'], level: 'debug' } },
9+
});
10+
11+
const logger = log4js.getLogger();
12+
logger.level = 'debug';
13+
logger.debug('This will go to the recording!');
14+
logger.debug('Another one');
15+
16+
const recording = log4js.recording();
17+
const loggingEvents = recording.playback();
18+
19+
t.equal(loggingEvents.length, 2, 'There should be 2 recorded events');
20+
t.equal(loggingEvents[0].data[0], 'This will go to the recording!');
21+
t.equal(loggingEvents[1].data[0], 'Another one');
22+
23+
recording.reset();
24+
const loggingEventsPostReset = recording.playback();
25+
26+
t.equal(
27+
loggingEventsPostReset.length,
28+
0,
29+
'There should be 0 recorded events'
30+
);
31+
32+
t.end();
833
});
934

10-
const logger = log4js.getLogger();
11-
logger.level = 'debug';
12-
logger.debug('This will go to the recording!');
13-
logger.debug('Another one');
35+
batch.test('should store 2 rolling logs in memory until cleared', (t) => {
36+
log4js.configure({
37+
appenders: { rec2: { type: 'recording', maxLength: 2 } },
38+
categories: { default: { appenders: ['rec2'], level: 'debug' } },
39+
});
1440

15-
const recording = log4js.recording();
16-
const loggingEvents = recording.playback();
41+
const logger = log4js.getLogger();
42+
logger.level = 'debug';
43+
logger.debug('First log entry');
44+
logger.debug('Second log entry');
1745

18-
t.equal(loggingEvents.length, 2, 'There should be 2 recorded events');
19-
t.equal(loggingEvents[0].data[0], 'This will go to the recording!');
20-
t.equal(loggingEvents[1].data[0], 'Another one');
46+
const recording = log4js.recording();
2147

22-
recording.reset();
23-
const loggingEventsPostReset = recording.playback();
48+
t.equal(
49+
recording.playback().length,
50+
2,
51+
'There should be 2 recorded events'
52+
);
53+
t.equal(recording.playback()[0].data[0], 'First log entry');
54+
t.equal(recording.playback()[1].data[0], 'Second log entry');
2455

25-
t.equal(
26-
loggingEventsPostReset.length,
27-
0,
28-
'There should be 0 recorded events'
29-
);
56+
logger.debug('Third log entry');
57+
58+
t.equal(
59+
recording.playback().length,
60+
2,
61+
'There should still be 2 recording events'
62+
);
63+
t.equal(recording.playback()[0].data[0], 'Second log entry');
64+
t.equal(recording.playback()[1].data[0], 'Third log entry');
65+
66+
recording.reset();
67+
const loggingEventsPostReset = recording.playback();
68+
69+
t.equal(
70+
loggingEventsPostReset.length,
71+
0,
72+
'There should be 0 recorded events'
73+
);
74+
75+
t.end();
76+
});
3077

31-
t.end();
78+
batch.end();
3279
});

0 commit comments

Comments
 (0)
pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy