logging.ts 876 B

123456789101112131415161718192021222324252627
  1. import winston, { Logger } from 'winston'
  2. import stringify from 'fast-safe-stringify'
  3. const colors = {
  4. error: 'red',
  5. warn: 'yellow',
  6. info: 'green',
  7. }
  8. winston.addColors(colors)
  9. export function createLogger(label: string): Logger {
  10. return winston.createLogger({
  11. level: process.env.DEBUG ? 'debug' : 'info',
  12. transports: [new winston.transports.Console()],
  13. defaultMeta: { label },
  14. format: winston.format.combine(
  15. winston.format.timestamp({ format: 'YYYY-MM-DD HH:mm:ss:ms' }),
  16. winston.format.metadata({ fillExcept: ['label', 'level', 'timestamp', 'message'] }),
  17. winston.format.colorize(),
  18. winston.format.printf(
  19. (info) =>
  20. `${info.timestamp} ${info.label} [${info.level}]: ${info.message}` +
  21. (Object.keys(info.metadata).length ? `\n${stringify(info.metadata, undefined, 4)}` : '')
  22. )
  23. ),
  24. })
  25. }