hb-smart-logger 1.0.3 → 1.0.5
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/package.json +5 -2
- package/src/index.js +52 -8
package/package.json
CHANGED
|
@@ -1,9 +1,11 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "hb-smart-logger",
|
|
3
|
-
"version": "1.0.
|
|
3
|
+
"version": "1.0.5",
|
|
4
4
|
"description": "Production-ready Winston logger with daily rotation, safe JSON handling, and logger.log() alias",
|
|
5
5
|
"main": "src/index.js",
|
|
6
|
-
"publishConfig": {
|
|
6
|
+
"publishConfig": {
|
|
7
|
+
"access": "public"
|
|
8
|
+
},
|
|
7
9
|
"keywords": [
|
|
8
10
|
"logger",
|
|
9
11
|
"winston",
|
|
@@ -15,6 +17,7 @@
|
|
|
15
17
|
"author": "Hafiz Bilal",
|
|
16
18
|
"license": "MIT",
|
|
17
19
|
"dependencies": {
|
|
20
|
+
"dotenv": "^17.2.3",
|
|
18
21
|
"winston": "^3.13.0",
|
|
19
22
|
"winston-daily-rotate-file": "^5.0.0"
|
|
20
23
|
}
|
package/src/index.js
CHANGED
|
@@ -1,12 +1,19 @@
|
|
|
1
1
|
const fs = require("fs");
|
|
2
2
|
const path = require("path");
|
|
3
3
|
const winston = require("winston");
|
|
4
|
+
const dotenv = require("dotenv");
|
|
4
5
|
const DailyRotateFile = require("winston-daily-rotate-file");
|
|
6
|
+
dotenv.config();
|
|
7
|
+
|
|
8
|
+
// Debug flag (explicit opt-in)
|
|
9
|
+
const DEBUG_ENABLED = String(process.env.DEBUG).toLowerCase() === "true";
|
|
5
10
|
|
|
6
11
|
// Ensure logs directory exists
|
|
7
12
|
const logDir = path.resolve("logs");
|
|
8
13
|
|
|
9
|
-
const subDirs = ["combined", "error", "warn", "info"
|
|
14
|
+
const subDirs = ["combined", "error", "warn", "info"];
|
|
15
|
+
if (DEBUG_ENABLED) subDirs.push("debug");
|
|
16
|
+
|
|
10
17
|
subDirs.forEach((dir) => {
|
|
11
18
|
const fullPath = path.join(logDir, dir);
|
|
12
19
|
if (!fs.existsSync(fullPath)) {
|
|
@@ -53,10 +60,10 @@ const logFormat = winston.format.printf(
|
|
|
53
60
|
);
|
|
54
61
|
|
|
55
62
|
/* ---------------------------------------------------
|
|
56
|
-
BASE LOGGER
|
|
63
|
+
BASE LOGGER (INFO ALWAYS ENABLED)
|
|
57
64
|
--------------------------------------------------- */
|
|
58
65
|
const baseLogger = winston.createLogger({
|
|
59
|
-
level: "info",
|
|
66
|
+
level: "info", // 🔒 never suppress info
|
|
60
67
|
format: winston.format.combine(
|
|
61
68
|
winston.format.timestamp({ format: "YYYY-MM-DD HH:mm:ss" }),
|
|
62
69
|
winston.format.errors({ stack: true }),
|
|
@@ -69,11 +76,12 @@ const baseLogger = winston.createLogger({
|
|
|
69
76
|
ROTATING FILES
|
|
70
77
|
--------------------------------------------------- */
|
|
71
78
|
|
|
72
|
-
// Combined logs
|
|
79
|
+
// Combined logs → info, warn, error ALWAYS
|
|
73
80
|
baseLogger.add(
|
|
74
81
|
new DailyRotateFile({
|
|
75
82
|
dirname: path.join(logDir, "combined"),
|
|
76
83
|
filename: "combined-%DATE%.log",
|
|
84
|
+
level: "info",
|
|
77
85
|
datePattern: "YYYY-MM-DD",
|
|
78
86
|
zippedArchive: true,
|
|
79
87
|
maxSize: "10m",
|
|
@@ -81,8 +89,8 @@ baseLogger.add(
|
|
|
81
89
|
})
|
|
82
90
|
);
|
|
83
91
|
|
|
84
|
-
// Per-level logs
|
|
85
|
-
["error", "warn", "info"
|
|
92
|
+
// Per-level logs (always enabled)
|
|
93
|
+
["error", "warn", "info"].forEach((level) => {
|
|
86
94
|
baseLogger.add(
|
|
87
95
|
new DailyRotateFile({
|
|
88
96
|
dirname: path.join(logDir, level),
|
|
@@ -96,9 +104,29 @@ baseLogger.add(
|
|
|
96
104
|
);
|
|
97
105
|
});
|
|
98
106
|
|
|
99
|
-
//
|
|
107
|
+
// Debug logs ONLY if enabled
|
|
108
|
+
if (DEBUG_ENABLED) {
|
|
109
|
+
baseLogger.add(
|
|
110
|
+
new DailyRotateFile({
|
|
111
|
+
dirname: path.join(logDir, "debug"),
|
|
112
|
+
filename: "debug-%DATE%.log",
|
|
113
|
+
level: "debug",
|
|
114
|
+
datePattern: "YYYY-MM-DD",
|
|
115
|
+
zippedArchive: true,
|
|
116
|
+
maxSize: "10m",
|
|
117
|
+
maxFiles: "30d",
|
|
118
|
+
})
|
|
119
|
+
);
|
|
120
|
+
}
|
|
121
|
+
|
|
122
|
+
/* ---------------------------------------------------
|
|
123
|
+
CONSOLE OUTPUT
|
|
124
|
+
--------------------------------------------------- */
|
|
125
|
+
|
|
126
|
+
// Info+ always to console
|
|
100
127
|
baseLogger.add(
|
|
101
128
|
new winston.transports.Console({
|
|
129
|
+
level: "info",
|
|
102
130
|
format: winston.format.combine(
|
|
103
131
|
winston.format.colorize(),
|
|
104
132
|
winston.format.simple()
|
|
@@ -106,6 +134,19 @@ baseLogger.add(
|
|
|
106
134
|
})
|
|
107
135
|
);
|
|
108
136
|
|
|
137
|
+
// Debug to console ONLY if enabled
|
|
138
|
+
if (DEBUG_ENABLED) {
|
|
139
|
+
baseLogger.add(
|
|
140
|
+
new winston.transports.Console({
|
|
141
|
+
level: "debug",
|
|
142
|
+
format: winston.format.combine(
|
|
143
|
+
winston.format.colorize(),
|
|
144
|
+
winston.format.simple()
|
|
145
|
+
),
|
|
146
|
+
})
|
|
147
|
+
);
|
|
148
|
+
}
|
|
149
|
+
|
|
109
150
|
/* ---------------------------------------------------
|
|
110
151
|
WRAPPER (MULTI-ARGS + logger.log)
|
|
111
152
|
--------------------------------------------------- */
|
|
@@ -113,9 +154,12 @@ const wrapLogger = (logger) => {
|
|
|
113
154
|
const levels = ["info", "warn", "error", "debug"];
|
|
114
155
|
|
|
115
156
|
for (const level of levels) {
|
|
116
|
-
const original = logger[level]
|
|
157
|
+
const original = logger[level]?.bind(logger);
|
|
117
158
|
|
|
118
159
|
logger[level] = (...args) => {
|
|
160
|
+
// Hard-disable debug when DEBUG is false
|
|
161
|
+
if (level === "debug" && !DEBUG_ENABLED) return;
|
|
162
|
+
|
|
119
163
|
const merged = args
|
|
120
164
|
.map((arg) => {
|
|
121
165
|
if (arg instanceof Error) {
|