pinojs / pino

🌲 super fast, all natural json logger
http://getpino.io
MIT License
14.21k stars 875 forks source link

pino log rotation (not using transport) #1086

Closed zhex900 closed 3 years ago

zhex900 commented 3 years ago

Hi,

Using transport as a separate process is not an option for me.

const logger = pino(
  {
    prettyPrint: {
      colorize: true,
      errorLikeObjectKeys: ["err", "error", "details"],
      levelFirst: true,
      translateTime: "SYS:hh:MM:ss TT dd-mm-yyyy",
      ignore: "pid,hostname,service",
      messageFormat: (log, messageKey, levelLabel) => {
        return applyServiceStyles(log, messageKey);
      },
    },
    level: process.env.LOG_LEVEL || "debug",
    serializers: {
      error: pino.stdSerializers.err,
    },
  },
  pino.destination(`${os.tmpdir()}/debug.log`) //@TODO log rotation
);

This is what I am using now.

Is it possible to do log rotation using destination? Like every 7 days.

I read https://github.com/pinojs/pino/blob/master/docs/help.md#rotate I can't make sense of it. Can you give me an example?

Can I make pino work with https://www.npmjs.com/package/rotating-file-stream?

zhex900 commented 3 years ago

I worked it out!

import { multistream } from "pino-multi-stream";
import { createStream } from "rotating-file-stream";

const stream = createStream("/tmp/file.log", {
  size: "10M", // rotate every 10 MegaBytes written
  interval: "5m", // rotate every 5 mins
  compress: "gzip", // compress rotated files
});

const logger = pino(
  {
    prettyPrint: {
      colorize: true,
      errorLikeObjectKeys: ["err", "error", "details"],
      levelFirst: true,
      translateTime: "SYS:hh:MM:ss TT dd-mm-yyyy",
      ignore: "pid,hostname,service",
      messageFormat: (log, messageKey, levelLabel) => {
        return applyServiceStyles(log, messageKey);
      },
    },
    level: process.env.LOG_LEVEL || "debug",
    serializers: {
      error: pino.stdSerializers.err,
    },
  },
  multistream([{ stream }])
github-actions[bot] commented 2 years ago

This issue has been automatically locked since there has not been any recent activity after it was closed. Please open a new issue for related bugs.