Cannot read property 'length' of undefined (in Winston)

Viewed 492

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?

0 Answers
Related