hb-smart-logger 1.0.3 → 1.0.4

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.
Files changed (2) hide show
  1. package/package.json +1 -1
  2. package/src/index.js +50 -8
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "hb-smart-logger",
3
- "version": "1.0.3",
3
+ "version": "1.0.4",
4
4
  "description": "Production-ready Winston logger with daily rotation, safe JSON handling, and logger.log() alias",
5
5
  "main": "src/index.js",
6
6
  "publishConfig": { "access": "public" },
package/src/index.js CHANGED
@@ -3,10 +3,15 @@ const path = require("path");
3
3
  const winston = require("winston");
4
4
  const DailyRotateFile = require("winston-daily-rotate-file");
5
5
 
6
+ // Debug flag (explicit opt-in)
7
+ const DEBUG_ENABLED = String(process.env.DEBUG).toLowerCase() === "true";
8
+
6
9
  // Ensure logs directory exists
7
10
  const logDir = path.resolve("logs");
8
11
 
9
- const subDirs = ["combined", "error", "warn", "info", "debug"];
12
+ const subDirs = ["combined", "error", "warn", "info"];
13
+ if (DEBUG_ENABLED) subDirs.push("debug");
14
+
10
15
  subDirs.forEach((dir) => {
11
16
  const fullPath = path.join(logDir, dir);
12
17
  if (!fs.existsSync(fullPath)) {
@@ -53,10 +58,10 @@ const logFormat = winston.format.printf(
53
58
  );
54
59
 
55
60
  /* ---------------------------------------------------
56
- BASE LOGGER
61
+ BASE LOGGER (INFO ALWAYS ENABLED)
57
62
  --------------------------------------------------- */
58
63
  const baseLogger = winston.createLogger({
59
- level: "info",
64
+ level: "info", // 🔒 never suppress info
60
65
  format: winston.format.combine(
61
66
  winston.format.timestamp({ format: "YYYY-MM-DD HH:mm:ss" }),
62
67
  winston.format.errors({ stack: true }),
@@ -69,11 +74,12 @@ const baseLogger = winston.createLogger({
69
74
  ROTATING FILES
70
75
  --------------------------------------------------- */
71
76
 
72
- // Combined logs (ALL levels)
77
+ // Combined logs info, warn, error ALWAYS
73
78
  baseLogger.add(
74
79
  new DailyRotateFile({
75
80
  dirname: path.join(logDir, "combined"),
76
81
  filename: "combined-%DATE%.log",
82
+ level: "info",
77
83
  datePattern: "YYYY-MM-DD",
78
84
  zippedArchive: true,
79
85
  maxSize: "10m",
@@ -81,8 +87,8 @@ baseLogger.add(
81
87
  })
82
88
  );
83
89
 
84
- // Per-level logs
85
- ["error", "warn", "info", "debug"].forEach((level) => {
90
+ // Per-level logs (always enabled)
91
+ ["error", "warn", "info"].forEach((level) => {
86
92
  baseLogger.add(
87
93
  new DailyRotateFile({
88
94
  dirname: path.join(logDir, level),
@@ -96,9 +102,29 @@ baseLogger.add(
96
102
  );
97
103
  });
98
104
 
99
- // Console output
105
+ // Debug logs ONLY if enabled
106
+ if (DEBUG_ENABLED) {
107
+ baseLogger.add(
108
+ new DailyRotateFile({
109
+ dirname: path.join(logDir, "debug"),
110
+ filename: "debug-%DATE%.log",
111
+ level: "debug",
112
+ datePattern: "YYYY-MM-DD",
113
+ zippedArchive: true,
114
+ maxSize: "10m",
115
+ maxFiles: "30d",
116
+ })
117
+ );
118
+ }
119
+
120
+ /* ---------------------------------------------------
121
+ CONSOLE OUTPUT
122
+ --------------------------------------------------- */
123
+
124
+ // Info+ always to console
100
125
  baseLogger.add(
101
126
  new winston.transports.Console({
127
+ level: "info",
102
128
  format: winston.format.combine(
103
129
  winston.format.colorize(),
104
130
  winston.format.simple()
@@ -106,6 +132,19 @@ baseLogger.add(
106
132
  })
107
133
  );
108
134
 
135
+ // Debug to console ONLY if enabled
136
+ if (DEBUG_ENABLED) {
137
+ baseLogger.add(
138
+ new winston.transports.Console({
139
+ level: "debug",
140
+ format: winston.format.combine(
141
+ winston.format.colorize(),
142
+ winston.format.simple()
143
+ ),
144
+ })
145
+ );
146
+ }
147
+
109
148
  /* ---------------------------------------------------
110
149
  WRAPPER (MULTI-ARGS + logger.log)
111
150
  --------------------------------------------------- */
@@ -113,9 +152,12 @@ const wrapLogger = (logger) => {
113
152
  const levels = ["info", "warn", "error", "debug"];
114
153
 
115
154
  for (const level of levels) {
116
- const original = logger[level].bind(logger);
155
+ const original = logger[level]?.bind(logger);
117
156
 
118
157
  logger[level] = (...args) => {
158
+ // Hard-disable debug when DEBUG is false
159
+ if (level === "debug" && !DEBUG_ENABLED) return;
160
+
119
161
  const merged = args
120
162
  .map((arg) => {
121
163
  if (arg instanceof Error) {