Skip to content

Commit 4313856

Browse files
Merge pull request #371 from RobinTail/feat-custom-logger
Feat: Custom logger
2 parents 98028e9 + cb317f7 commit 4313856

File tree

4 files changed

+20
-5
lines changed

4 files changed

+20
-5
lines changed

README.md

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -82,6 +82,7 @@ app.use(fileUpload({
8282

8383
You can set `debug` option to `true` to see some logging about upload process.
8484
In this case middleware uses `console.log` and adds `Express-file-upload` prefix for outputs.
85+
You can set a custom logger having `.log()` method to the `logger` option.
8586

8687
It will show you whether the request is invalid and also common events triggered during upload.
8788
That can be really useful for troubleshooting and ***we recommend attaching debug output to each issue on Github***.
@@ -121,6 +122,7 @@ useTempFiles | <ul><li><code>false</code>&nbsp;**(default)**</li><li><code>true<
121122
tempFileDir | <ul><li><code>String</code>&nbsp;**(path)**</li></ul> | Path to store temporary files.<br />Used along with the <code>useTempFiles</code> option. By default this module uses 'tmp' folder in the current working directory.<br />You can use trailing slash, but it is not necessary.
122123
parseNested | <ul><li><code>false</code>&nbsp;**(default)**</li><li><code>true</code></li></ul> | By default, req.body and req.files are flattened like this: <code>{'name': 'John', 'hobbies[0]': 'Cinema', 'hobbies[1]': 'Bike'}</code><br /><br/>When this option is enabled they are parsed in order to be nested like this: <code>{'name': 'John', 'hobbies': ['Cinema', 'Bike']}</code>
123124
debug | <ul><li><code>false</code>&nbsp;**(default)**</li><li><code>true</code></ul> | Turn on/off upload process logging. Can be useful for troubleshooting.
125+
logger | <ul><li><code>console</code>&nbsp;**(default)**</li><li><code>{log: function(msg: string)}</code></li></ul> | Customizable logger to write debug messages to. Console is default.
124126
uploadTimeout | <ul><li><code>60000</code>&nbsp;**(default)**</li><li><code>Integer</code></ul> | This defines how long to wait for data before aborting. Set to 0 if you want to turn off timeout checks.
125127

126128
# Help Wanted

lib/index.js

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@ const busboy = require('busboy'); // eslint-disable-line no-unused-vars
88

99
const DEFAULT_OPTIONS = {
1010
debug: false,
11+
logger: console,
1112
uploadTimeout: 60000,
1213
fileHandler: false,
1314
uriDecodeFileNames: false,

lib/utilities.js

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -21,8 +21,8 @@ let tempCounter = 0;
2121
*/
2222
const debugLog = (options, msg) => {
2323
const opts = options || {};
24-
if (!opts.debug) return false;
25-
console.log(`Express-file-upload: ${msg}`); // eslint-disable-line
24+
if (!opts.debug || !opts.logger || typeof opts.logger.log !== "function") return false;
25+
opts.logger.log(`Express-file-upload: ${msg}`);
2626
return true;
2727
};
2828

test/utilities.spec.js

Lines changed: 15 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -42,12 +42,24 @@ describe('utilities: Test of the utilities functions', function() {
4242
assert.equal(debugLog(null, testMessage), false);
4343
});
4444

45-
it('debugLog returns false if option debug is false', () => {
45+
it('debugLog returns false if option debug is false or logger is not set', () => {
4646
assert.equal(debugLog({debug: false}, testMessage), false);
47+
assert.equal(debugLog({debug: true, logger: undefined}, testMessage), false);
48+
assert.equal(debugLog({debug: true, logger: {}}, testMessage), false);
4749
});
4850

49-
it('debugLog returns true if option debug is true', () => {
50-
assert.equal(debugLog({debug: true}, testMessage), true);
51+
it('debugLog returns true if option debug is true and logger is set', () => {
52+
assert.equal(debugLog({debug: true, logger: console}, testMessage), true);
53+
});
54+
55+
it('supports a custom logger', () => {
56+
const calls = [];
57+
const logger = {
58+
log: (...args) => calls.push(args)
59+
};
60+
debugLog({debug: true, logger}, testMessage);
61+
assert.equal(calls.length, 1);
62+
assert.deepEqual(calls[0], [`Express-file-upload: ${testMessage}`]);
5163
});
5264

5365
});

0 commit comments

Comments
 (0)