forked from Deen-Bridge/dnb-backend
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathlogger.js
More file actions
108 lines (95 loc) · 2.39 KB
/
Copy pathlogger.js
File metadata and controls
108 lines (95 loc) · 2.39 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
import winston from "winston";
import DailyRotateFile from "winston-daily-rotate-file";
import path from "path";
import { fileURLToPath } from "url";
const __filename = fileURLToPath(import.meta.url);
const __dirname = path.dirname(__filename);
// Define log levels
const levels = {
error: 0,
warn: 1,
info: 2,
http: 3,
debug: 4,
};
// Define colors for each level
const colors = {
error: "red",
warn: "yellow",
info: "green",
http: "magenta",
debug: "white",
};
winston.addColors(colors);
// Define log format
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) => `${info.timestamp} ${info.level}: ${info.message}`
)
);
// Define which logs to print based on environment
const level = () => {
const env = process.env.NODE_ENV || "development";
const isDevelopment = env === "development";
return isDevelopment ? "debug" : "warn";
};
// Define transports
const transports = [
// Console transport
new winston.transports.Console({
format: winston.format.combine(
winston.format.colorize(),
winston.format.simple()
),
}),
// Error log file - rotates daily
new DailyRotateFile({
filename: path.join(__dirname, "../../logs/error-%DATE%.log"),
datePattern: "YYYY-MM-DD",
level: "error",
maxSize: "20m",
maxFiles: "14d",
format: winston.format.combine(
winston.format.uncolorize(),
winston.format.json()
),
}),
// Combined log file - all logs
new DailyRotateFile({
filename: path.join(__dirname, "../../logs/combined-%DATE%.log"),
datePattern: "YYYY-MM-DD",
maxSize: "20m",
maxFiles: "14d",
format: winston.format.combine(
winston.format.uncolorize(),
winston.format.json()
),
}),
// HTTP requests log
new DailyRotateFile({
filename: path.join(__dirname, "../../logs/http-%DATE%.log"),
datePattern: "YYYY-MM-DD",
level: "http",
maxSize: "20m",
maxFiles: "7d",
format: winston.format.combine(
winston.format.uncolorize(),
winston.format.json()
),
}),
];
// Create the logger
const logger = winston.createLogger({
level: level(),
levels,
format,
transports,
exitOnError: false,
});
// Create a stream object for Morgan
logger.stream = {
write: (message) => logger.http(message.trim()),
};
export default logger;