winston
versión?_winston@2
winston@3
node -v
salidas:_ v10.12.0PrettyPrint no funciona
winston.format.combine(
winston.format.timestamp(),
winston.format.colorize(),
winston.format.prettyPrint(),
winston.format.splat(),
winston.format.simple(), // removing this gives an even worse output
)
Tiene el mismo comportamiento de winston 2
Intentando obtener el mismo comportamiento de registro de winston 2, pero no funciona. todo el registro se murmura, por lo que es imposible leerlo mediante el transporte de la consola.
Yo tuve el mismo problema. Echa un vistazo a #1537.
Si alguien está buscando una solución alternativa mientras se resuelve el problema, estoy usando el siguiente formato para el entorno de desarrollo local:
import { format } from 'winston';
const {
colorize,
combine,
timestamp,
errors,
printf,
splat,
} = format;
const devFormat = combine(
format((info) => {
info.level = info.level.toUpperCase();
return info;
})(),
colorize(),
timestamp(),
splat(),
errors(),
printf(
({
timestamp,
level,
message,
...rest
}) => {
let restString = JSON.stringify(rest, undefined, 2);
restString = restString === '{}' ? '' : restString;
return `[${timestamp}] ${level} - ${message} ${restString}`;
},
),
);
Parece estar funcionando bien para mí:
aquí hay un código de muestra que arroja un error intencionalmente basado en el procesamiento de un evento simulado de S3
~/repos/ghe/lambda-logging (master *% u=)> node -r dotenv/config ./src/test-harness.js
{
module: 'app.js',
s3SchemaVersion: '1.0',
configurationId: '828aa6fc-f7b5-4305-8584-487c791949c1',
bucket: {
name: 'lambda-artifacts-deafc19498e3f2df',
ownerIdentity: { principalId: 'A3I5XTEXAMAI3E' },
arn: 'arn:aws:s3:::lambda-artifacts-deafc19498e3f2df'
},
object: {
key: 'b21b84d653bb07b05b1e6b33684dc11b',
size: 1305107,
eTag: 'b21b84d653bb07b05b1e6b33684dc11b',
sequencer: '0C0F6F405D6ED209E1'
},
level: 'INFO',
message: 'processing event',
timestamp: '2020-05-09 20:03:43'
}
{
level: 'ERROR',
module: 'index.js',
timestamp: '2020-05-09 20:03:43',
message: "Cannot read property '0' of undefined",
stack: "TypeError: Cannot read property '0' of undefined\n" +
' at Object.run (/Users/jason.berk/repos/ghe/lambda-logging/src/app.js:5:26)\n' +
' at Object.exports.handler (/Users/jason.berk/repos/ghe/lambda-logging/src/index.js:7:22)\n' +
' at Object.<anonymous> (/Users/jason.berk/repos/ghe/lambda-logging/src/test-harness.js:44:9)\n' +
' at Module._compile (internal/modules/cjs/loader.js:1158:30)\n' +
' at Object.Module._extensions..js (internal/modules/cjs/loader.js:1178:10)\n' +
' at Module.load (internal/modules/cjs/loader.js:1002:32)\n' +
' at Function.Module._load (internal/modules/cjs/loader.js:901:14)\n' +
' at Function.executeUserEntryPoint [as runMain] (internal/modules/run_main.js:74:12)\n' +
' at internal/main/run_main_module.js:18:47'
}
la configuración de mi registrador es:
const path = require('path');
const { createLogger, format, transports } = require('winston');
const { combine, errors, timestamp } = format;
const baseFormat = combine(
timestamp({ format: 'YYYY-MM-DD HH:mm:ss' }),
errors({ stack: true }),
format((info) => {
info.level = info.level.toUpperCase();
return info;
})(),
);
const splunkFormat = combine(
baseFormat,
format.json(),
);
const prettyFormat = combine(
baseFormat,
format.prettyPrint(),
);
const createCustomLogger = (moduleName) => createLogger({
level: process.env.LOG_LEVEL,
format: process.env.PRETTY_LOGS ? prettyFormat : splunkFormat,
defaultMeta: { module: path.basename(moduleName) },
transports: [
new transports.Console(),
],
});
module.exports = createCustomLogger;
Comentario más útil
Si alguien está buscando una solución alternativa mientras se resuelve el problema, estoy usando el siguiente formato para el entorno de desarrollo local: