Skip to content

fluentd winston color formatting doesnt work at transport level #172

@happy-machine

Description

@happy-machine

Hey folks

I apologise in advance ive read previous issues and stack overflow about this and cant seem to find a resolution. Ive even tried resorting to injecting a fluend plugin to remove color formatting before logs are sent to elasticsearch, this is clearly not best practice, it shouldnt be necessary to send something and then remove it i think.

If i remove the loggers format property the transport formats dont have any effect
See below (i am caching levels warn and above in a local directory)

import { createLogger, format, transports, addColors } from "winston";
var fluentLogger = require("fluent-logger");

const winstonTransportConfigFactory = type => {
  addColors({
    error: "red",
    warn: "yellow",
    info: "cyan",
    debug: "green"
  });
  if (type === "file")
    return {
      //store warn and above locally
      filename: "./logs/local.log",
      level: "warn",
      format: format.json(),
      colorize: false
    };
  if (type === "console")
    return {
      format: format.combine(format.simple(), format.colorize()),
      colorize: true
    };
  if (type === "fluentd")
    return {
      format: format.json(),
      colorize: false
    };
};

const fluent = new (fluentLogger.support.winstonTransport(
  winstonTransportConfigFactory("fluentd")
))("agronomy-api.test", {
  host: "localhost",
  port: 24224,
  timeout: 3.0,
  requireAckResponse: true
});

const logger = createLogger({
  level: "debug",
  exitOnError: false,
  format: format.combine(format.simple(), format.colorize()),
  transports: [
    new transports.Console(winstonTransportConfigFactory("console")),
    new transports.File(winstonTransportConfigFactory("file")),
    fluent
  ]
});

logger.on("flush", () => {
  console.log("Flush");
});

logger.on("finish", () => {
  console.log(`Finish: ${fluent.sender}`);
  fluent.sender.end("end", {}, () => {});
});

export default logger;

I have used colorize as well as running the fomat.colorize function as there are mixed messages floating around about this i wasnt clear on how to do this and figured it wouldnt do any harm to overwrite this property if it did already exist?

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions