I am getting the following error with my Winston Transport in the express backend of my MERN app:
error: uncaughtException: Cannot read property 'length' of undefined
TypeError: Cannot read property 'length' of undefined
at DerivedLogger.add (/Users/user-2/bulk-code/platform-v2/node_modules/winston/lib/winston/logger.js:344:45)
at DerivedLogger.transportEvent (/Users/user-2/bulk-code/platform-v2/node_modules/winston/lib/winston/logger.js:628:14)
at LegacyTransportStream.emit (events.js:327:22)
at LegacyTransportStream.EventEmitter.emit (domain.js:467:12)
at LegacyTransportStream.transportError (/Users/user-2/bulk-code/platform-v2/node_modules/winston-transport/legacy.js:32:10)
at exports.Papertrail.emit (events.js:315:20)
at exports.Papertrail.EventEmitter.emit (domain.js:467:12)
at exports.Papertrail.Papertrail._silentErrorEmitter (/Users/user-2/bulk-code/platform-v2/node_modules/winston-papertrail/lib/winston-papertrail.js:479:8)
at TLSSocket.onErrored (/Users/user-2/bulk-code/platform-v2/node_modules/winston-papertrail/lib/winston-papertrail.js:236:8)
at Object.onceWrapper (events.js:422:26)
at TLSSocket.emit (events.js:315:20)
at TLSSocket.EventEmitter.emit (domain.js:467:12)
at emitErrorNT (internal/streams/destroy.js:106:8)
at emitErrorCloseNT (internal/streams/destroy.js:74:3)
at processTicksAndRejections (internal/process/task_queues.js:80:21)
The code for my logger looks like this:
import { object } from "joi";
const winston = require("winston");
require("winston-papertrail").Papertrail;
const levels = {
error: 0,
warn: 1,
info: 2,
http: 3,
debug: 4,
};
const level = () => {
const env = process.env.NODE_ENV || "development";
const isDevelopment = env === "development";
return isDevelopment ? "debug" : "warn";
};
const colors = {
error: "red",
warn: "yellow",
info: "green",
http: "magenta",
debug: "white",
};
const format = winston.format.combine(
winston.format.timestamp({ format: "YYYY-MM-DD HH:mm:ss:ms" }),
winston.format.colorize({ all: true }),
winston.format.printf(
(info: any) => `${info.timestamp} ${info.level}: ${info.message}`
)
);
var console = {
level: "debug",
handleExceptions: true,
json: false,
colorize: true,
};
var error_file = {
filename: "./src/logger/logs/error.log",
level: "error",
handleExceptions: true,
};
var file = {
level: "info",
filename: "./src/logger/logs/app.log",
json: true,
maxsize: 5242880, // 5MB
maxFiles: 5,
colorize: true,
};
var winstonPapertrail = {
host: "logs5.papertrailapp.com",
port: 32019,
};
const transports = [
new winston.transports.Console(console),
new winston.transports.File(file),
new winston.transports.File(error_file),
new winston.transports.Papertrail(winstonPapertrail),
];
//catches uncaught errors
const exceptionHandlers = [
new winston.transports.File({ filename: "exceptions.log" }),
];
const Logger = winston.createLogger({
level: level(),
levels,
format,
transports,
exceptionHandlers,
exitOnError: false,
});
export default Logger;
Can anyone help where this bug could be occurring? The app runs fine, but it just throws this error after several hours of being in idle mode in the terminal. I do understand somewhere a variable is being returned null but I am not really sure where. Could anyone please help?