node.js - Winston HTTP-loggnivå beter sig annorlunda än info
Jag använder winston för att logga inkommande förfrågningar på en node v16 express.js-server med följande kodexempel (förenklat till det väsentliga för att återskapa beteendet).
Jag är inte säker på vad som orsakar denna skillnad i beteende och jag kunde inte hitta någon dokumentation som är relevant för det.
Paket :
"express": "^4.17.1",
"winston": "~3.3.3"
Serverskript:
import express from 'express';
import winston from 'winston';
const app = express();
export const TEST_LOGGER = winston.createLogger(
{
level: 'silly',
format: winston.format.json(),
defaultMeta: { service: 'test' },
transports: [
new winston.transports.Console({
format: winston.format.combine(
winston.format.errors({ stack: true }),
winston.format.timestamp(),
winston.format.cli(),
),
}),
],
});
TEST_LOGGER.info(`\u27F5 Starting http logging`);
TEST_LOGGER.http(`\u27F5 Starting http logging`);
app.use((req, _response, next) =>
{
TEST_LOGGER.error(`\u27F5 ${ req.method } '${ req.originalUrl }'`);
TEST_LOGGER.warn(`\u27F5 ${ req.method } '${ req.originalUrl }'`);
TEST_LOGGER.info(`\u27F5 ${ req.method } '${ req.originalUrl }'`);
TEST_LOGGER.verbose(`\u27F5 ${ req.method } '${ req.originalUrl }'`);
TEST_LOGGER.http(`\u27F5 ${ req.method } '${ req.originalUrl }'`);
TEST_LOGGER.debug(`\u27F5 ${ req.method } '${ req.originalUrl }'`);
TEST_LOGGER.silly(`\u27F5 ${ req.method } '${ req.originalUrl }'`);
next();
});
app.listen(8080, () =>
{
TEST_LOGGER.info(`\u26A1 'server' launched`);
});
Loggar vid uppstart av servern och vid anrop av /:
info: ⟵ Starting http logging
http:undefined⟵ Starting http logging
info: ⚡ 'server' launched
error: ⟵ GET '/'
warn: ⟵ GET '/'
info: ⟵ GET '/'
verbose: ⟵ GET '/'
http:undefined⟵ GET '/'
debug: ⟵ GET '/'
silly: ⟵ GET '/'
error: ⟵ GET '/'
warn: ⟵ GET '/'
info: ⟵ GET '/'
verbose: ⟵ GET '/'
http:undefined⟵ GET '/'
debug: ⟵ GET '/'
silly: ⟵ GET '/'
error: ⟵ GET '/'
warn: ⟵ GET '/'
info: ⟵ GET '/'
verbose: ⟵ GET '/'
http:undefined⟵ GET '/'
debug: ⟵ GET '/'
silly: ⟵ GET '/'
Var kommer de där undefined ifrån?
Problem på GitHub: https://github.com/winstonjs/logform/issues/183
Svar #1
Intressant nog saknas http-loggnivån från standardloggnivåerna i källan:
https://github.com/winstonjs/winston/blob/master/lib/winston.js#L87
// Pass through the target methods onto `winston.
Object.keys(exports.config.npm.levels)
.concat([
'log',
'query',
'stream',
'add',
'remove',
'clear',
'profile',
'startTimer',
'handleExceptions',
'unhandleExceptions',
'handleRejections',
'unhandleRejections',
'configure',
'child'
])
.forEach(
method => (exports[method] = (...args) => defaultLogger[method](...args))
);
Och verkar komma från paketet logform:
https://www.npmjs.com/package/logform
Så jag skulle dra slutsatsen att http inte är en giltig Winston-loggnivå, detta bör förmodligen tas upp som ett problem på Winstons GitHub.
