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.
Files changed (2) hide show
  1. package/package.json +5 -2
  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",
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": { "access": "public" },
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", "debug"];
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 (ALL levels)
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", "debug"].forEach((level) => {
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
- // Console output
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].bind(logger);
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) {