|
1 |
| -import Pino, { LoggerOptions } from "pino"; |
| 1 | +import { createLogger, format, transports } from "winston"; |
2 | 2 | import { env } from "./env";
|
3 | 3 |
|
4 |
| -const defaultOptions: LoggerOptions = { |
5 |
| - redact: ["headers.authorization"], |
6 |
| - transport: { |
7 |
| - target: "pino-pretty", |
8 |
| - options: { |
9 |
| - translateTime: "HH:MM:ss Z", |
10 |
| - ignore: "pid,hostname,reqId", |
11 |
| - singleLine: true, |
12 |
| - }, |
13 |
| - }, |
14 |
| - level: env.LOG_LEVEL, |
| 4 | +// Custom filter for stdout transport |
| 5 | +const filterOnlyInfoAndWarn = format((info) => { |
| 6 | + if (info.level === "error") { |
| 7 | + return false; // Exclude 'error' level logs |
| 8 | + } |
| 9 | + return info; |
| 10 | +}); |
| 11 | + |
| 12 | +// Custom filter for stderr transport |
| 13 | +const filterOnlyErrors = format((info) => { |
| 14 | + if (info.level !== "error") { |
| 15 | + return false; // Exclude non-error level logs |
| 16 | + } |
| 17 | + return info; |
| 18 | +}); |
| 19 | + |
| 20 | +const colorizeFormat = () => { |
| 21 | + if (env.NODE_ENV === "development") { |
| 22 | + return format.colorize(); |
| 23 | + } else { |
| 24 | + return format.uncolorize(); |
| 25 | + } |
15 | 26 | };
|
16 | 27 |
|
17 |
| -const pino = Pino(defaultOptions); |
| 28 | +const winstonLogger = createLogger({ |
| 29 | + level: env.LOG_LEVEL, |
| 30 | + format: format.combine( |
| 31 | + format.timestamp(), |
| 32 | + format.errors({ stack: true }), |
| 33 | + format.splat(), |
| 34 | + colorizeFormat(), |
| 35 | + format.printf(({ level, message, timestamp, error }) => { |
| 36 | + if (error) { |
| 37 | + return `[${timestamp}] ${level}: ${message} - ${error.stack}`; |
| 38 | + } |
| 39 | + return `[${timestamp}] ${level}: ${message}`; |
| 40 | + }), |
| 41 | + ), |
| 42 | + transports: [ |
| 43 | + // Transport for stdout |
| 44 | + new transports.Console({ |
| 45 | + format: format.combine(filterOnlyInfoAndWarn()), |
| 46 | + stderrLevels: [], // Don't log "error" to stdout |
| 47 | + }), |
| 48 | + // Transport for stderr |
| 49 | + new transports.Console({ |
| 50 | + format: format.combine(filterOnlyErrors()), |
| 51 | + stderrLevels: ["error"], // Ensure errors go to stderr |
| 52 | + }), |
| 53 | + ], |
| 54 | +}); |
18 | 55 |
|
19 | 56 | interface LoggerParams {
|
20 | 57 | service: (typeof env)["LOG_SERVICES"][0];
|
@@ -46,9 +83,10 @@ export const logger = ({
|
46 | 83 | if (data) {
|
47 | 84 | suffix += ` - ${JSON.stringify(data)}`;
|
48 | 85 | }
|
| 86 | + |
49 | 87 | if (error) {
|
50 |
| - suffix += ` - ${error?.message || error}`; |
| 88 | + winstonLogger.error(`${prefix}${message}${suffix}`, { error }); |
| 89 | + } else { |
| 90 | + winstonLogger.log(level, `${prefix}${message}${suffix}`); |
51 | 91 | }
|
52 |
| - |
53 |
| - return pino[level](`${prefix}${message}${suffix}`); |
54 | 92 | };
|
0 commit comments