@x12i/logxer 4.0.0
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/LICENSE +21 -0
- package/README.md +1255 -0
- package/dist/app-info.d.ts +25 -0
- package/dist/app-info.d.ts.map +1 -0
- package/dist/app-info.js +179 -0
- package/dist/app-info.js.map +1 -0
- package/dist/formatters/table-formatter.d.ts +23 -0
- package/dist/formatters/table-formatter.d.ts.map +1 -0
- package/dist/formatters/table-formatter.js +218 -0
- package/dist/formatters/table-formatter.js.map +1 -0
- package/dist/formatters/yaml-formatter.d.ts +14 -0
- package/dist/formatters/yaml-formatter.d.ts.map +1 -0
- package/dist/formatters/yaml-formatter.js +164 -0
- package/dist/formatters/yaml-formatter.js.map +1 -0
- package/dist/index.d.ts +44 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +219 -0
- package/dist/index.js.map +1 -0
- package/dist/logxer.d.ts +145 -0
- package/dist/logxer.d.ts.map +1 -0
- package/dist/logxer.js +811 -0
- package/dist/logxer.js.map +1 -0
- package/dist/outputs/shadow-sink.d.ts +83 -0
- package/dist/outputs/shadow-sink.d.ts.map +1 -0
- package/dist/outputs/shadow-sink.js +380 -0
- package/dist/outputs/shadow-sink.js.map +1 -0
- package/dist/outputs/unified-logger-output.d.ts +30 -0
- package/dist/outputs/unified-logger-output.d.ts.map +1 -0
- package/dist/outputs/unified-logger-output.js +125 -0
- package/dist/outputs/unified-logger-output.js.map +1 -0
- package/dist/sanitizer.d.ts +69 -0
- package/dist/sanitizer.d.ts.map +1 -0
- package/dist/sanitizer.js +507 -0
- package/dist/sanitizer.js.map +1 -0
- package/dist/trails/headers.d.ts +21 -0
- package/dist/trails/headers.d.ts.map +1 -0
- package/dist/trails/headers.js +121 -0
- package/dist/trails/headers.js.map +1 -0
- package/dist/trails/index.d.ts +59 -0
- package/dist/trails/index.d.ts.map +1 -0
- package/dist/trails/index.js +197 -0
- package/dist/trails/index.js.map +1 -0
- package/dist/types.d.ts +411 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +8 -0
- package/dist/types.js.map +1 -0
- package/dist/utils/debug-config.d.ts +19 -0
- package/dist/utils/debug-config.d.ts.map +1 -0
- package/dist/utils/debug-config.js +172 -0
- package/dist/utils/debug-config.js.map +1 -0
- package/dist/utils/package-logs-level.d.ts +40 -0
- package/dist/utils/package-logs-level.d.ts.map +1 -0
- package/dist/utils/package-logs-level.js +79 -0
- package/dist/utils/package-logs-level.js.map +1 -0
- package/docs/package-usage.md +155 -0
- package/docs/package.md +48 -0
- package/docs/upgrade-for-package-authors.md +85 -0
- package/package.json +98 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
|
package/dist/types.js
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":";AAAA;;;;GAIG"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Debug Configuration Loader
|
|
3
|
+
*
|
|
4
|
+
* Loads logxer-debug.json configuration file from project root
|
|
5
|
+
* for runtime log filtering based on identity and application name.
|
|
6
|
+
*/
|
|
7
|
+
import type { DebugScopingConfig } from '../types';
|
|
8
|
+
/**
|
|
9
|
+
* Load logxer-debug.json configuration from project root
|
|
10
|
+
* Searches up the directory tree from process.cwd() to find the file
|
|
11
|
+
*
|
|
12
|
+
* @returns DebugScopingConfig if found and valid, null otherwise
|
|
13
|
+
*/
|
|
14
|
+
export declare function loadDebugConfig(): DebugScopingConfig | null;
|
|
15
|
+
/**
|
|
16
|
+
* Reset the cached debug config (useful for testing)
|
|
17
|
+
*/
|
|
18
|
+
export declare function resetDebugConfigCache(): void;
|
|
19
|
+
//# sourceMappingURL=debug-config.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"debug-config.d.ts","sourceRoot":"","sources":["../../src/utils/debug-config.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAIH,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,UAAU,CAAC;AAInD;;;;;GAKG;AACH,wBAAgB,eAAe,IAAI,kBAAkB,GAAG,IAAI,CA6H3D;AAED;;GAEG;AACH,wBAAgB,qBAAqB,IAAI,IAAI,CAE5C"}
|
|
@@ -0,0 +1,172 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Debug Configuration Loader
|
|
4
|
+
*
|
|
5
|
+
* Loads logxer-debug.json configuration file from project root
|
|
6
|
+
* for runtime log filtering based on identity and application name.
|
|
7
|
+
*/
|
|
8
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
9
|
+
if (k2 === undefined) k2 = k;
|
|
10
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
11
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
12
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
13
|
+
}
|
|
14
|
+
Object.defineProperty(o, k2, desc);
|
|
15
|
+
}) : (function(o, m, k, k2) {
|
|
16
|
+
if (k2 === undefined) k2 = k;
|
|
17
|
+
o[k2] = m[k];
|
|
18
|
+
}));
|
|
19
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
20
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
21
|
+
}) : function(o, v) {
|
|
22
|
+
o["default"] = v;
|
|
23
|
+
});
|
|
24
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
25
|
+
var ownKeys = function(o) {
|
|
26
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
27
|
+
var ar = [];
|
|
28
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
29
|
+
return ar;
|
|
30
|
+
};
|
|
31
|
+
return ownKeys(o);
|
|
32
|
+
};
|
|
33
|
+
return function (mod) {
|
|
34
|
+
if (mod && mod.__esModule) return mod;
|
|
35
|
+
var result = {};
|
|
36
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
37
|
+
__setModuleDefault(result, mod);
|
|
38
|
+
return result;
|
|
39
|
+
};
|
|
40
|
+
})();
|
|
41
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
42
|
+
exports.loadDebugConfig = loadDebugConfig;
|
|
43
|
+
exports.resetDebugConfigCache = resetDebugConfigCache;
|
|
44
|
+
const fs = __importStar(require("fs"));
|
|
45
|
+
const path = __importStar(require("path"));
|
|
46
|
+
let cachedConfig = undefined;
|
|
47
|
+
/**
|
|
48
|
+
* Load logxer-debug.json configuration from project root
|
|
49
|
+
* Searches up the directory tree from process.cwd() to find the file
|
|
50
|
+
*
|
|
51
|
+
* @returns DebugScopingConfig if found and valid, null otherwise
|
|
52
|
+
*/
|
|
53
|
+
function loadDebugConfig() {
|
|
54
|
+
// Return cached result if available
|
|
55
|
+
if (cachedConfig !== undefined) {
|
|
56
|
+
return cachedConfig;
|
|
57
|
+
}
|
|
58
|
+
try {
|
|
59
|
+
// Start from process.cwd() and search up for logxer-debug.json
|
|
60
|
+
let currentDir = process.cwd();
|
|
61
|
+
const rootPath = path.parse(currentDir).root;
|
|
62
|
+
while (currentDir !== rootPath) {
|
|
63
|
+
const configPath = path.join(currentDir, 'logxer-debug.json');
|
|
64
|
+
if (fs.existsSync(configPath)) {
|
|
65
|
+
try {
|
|
66
|
+
const content = fs.readFileSync(configPath, 'utf8');
|
|
67
|
+
const config = JSON.parse(content);
|
|
68
|
+
// Validate structure
|
|
69
|
+
if (config && config.scoping) {
|
|
70
|
+
// Validate status
|
|
71
|
+
if (config.scoping.status !== 'enabled' && config.scoping.status !== 'disabled') {
|
|
72
|
+
console.warn('[logxer] Invalid logxer-debug.json: scoping.status must be "enabled" or "disabled"');
|
|
73
|
+
cachedConfig = null;
|
|
74
|
+
return null;
|
|
75
|
+
}
|
|
76
|
+
// Ensure arrays are arrays
|
|
77
|
+
if (config.scoping.filterIdentities && !Array.isArray(config.scoping.filterIdentities)) {
|
|
78
|
+
console.warn('[logxer] Invalid logxer-debug.json: filterIdentities must be an array');
|
|
79
|
+
cachedConfig = null;
|
|
80
|
+
return null;
|
|
81
|
+
}
|
|
82
|
+
if (config.scoping.filteredApplications && !Array.isArray(config.scoping.filteredApplications)) {
|
|
83
|
+
console.warn('[logxer] Invalid logxer-debug.json: filteredApplications must be an array');
|
|
84
|
+
cachedConfig = null;
|
|
85
|
+
return null;
|
|
86
|
+
}
|
|
87
|
+
// Validate between array if present
|
|
88
|
+
if (config.scoping.between !== undefined) {
|
|
89
|
+
if (!Array.isArray(config.scoping.between)) {
|
|
90
|
+
console.warn('[logxer] Invalid logxer-debug.json: between must be an array');
|
|
91
|
+
cachedConfig = null;
|
|
92
|
+
return null;
|
|
93
|
+
}
|
|
94
|
+
// Validate each between rule
|
|
95
|
+
for (let i = 0; i < config.scoping.between.length; i++) {
|
|
96
|
+
const rule = config.scoping.between[i];
|
|
97
|
+
if (!rule || typeof rule !== 'object') {
|
|
98
|
+
console.warn(`[logxer] Invalid logxer-debug.json: between[${i}] must be an object`);
|
|
99
|
+
cachedConfig = null;
|
|
100
|
+
return null;
|
|
101
|
+
}
|
|
102
|
+
// Validate action
|
|
103
|
+
if (rule.action !== 'include' && rule.action !== 'exclude') {
|
|
104
|
+
console.warn(`[logxer] Invalid logxer-debug.json: between[${i}].action must be "include" or "exclude"`);
|
|
105
|
+
cachedConfig = null;
|
|
106
|
+
return null;
|
|
107
|
+
}
|
|
108
|
+
// Validate optional boolean fields
|
|
109
|
+
if (rule.exactMatch !== undefined && typeof rule.exactMatch !== 'boolean') {
|
|
110
|
+
console.warn(`[logxer] Invalid logxer-debug.json: between[${i}].exactMatch must be a boolean`);
|
|
111
|
+
cachedConfig = null;
|
|
112
|
+
return null;
|
|
113
|
+
}
|
|
114
|
+
if (rule.searchLog !== undefined && typeof rule.searchLog !== 'boolean') {
|
|
115
|
+
console.warn(`[logxer] Invalid logxer-debug.json: between[${i}].searchLog must be a boolean`);
|
|
116
|
+
cachedConfig = null;
|
|
117
|
+
return null;
|
|
118
|
+
}
|
|
119
|
+
// Validate startIdentities and endIdentities are arrays
|
|
120
|
+
if (!Array.isArray(rule.startIdentities)) {
|
|
121
|
+
console.warn(`[logxer] Invalid logxer-debug.json: between[${i}].startIdentities must be an array`);
|
|
122
|
+
cachedConfig = null;
|
|
123
|
+
return null;
|
|
124
|
+
}
|
|
125
|
+
if (!Array.isArray(rule.endIdentities)) {
|
|
126
|
+
console.warn(`[logxer] Invalid logxer-debug.json: between[${i}].endIdentities must be an array`);
|
|
127
|
+
cachedConfig = null;
|
|
128
|
+
return null;
|
|
129
|
+
}
|
|
130
|
+
}
|
|
131
|
+
}
|
|
132
|
+
// Cache and return valid config
|
|
133
|
+
cachedConfig = config;
|
|
134
|
+
return config;
|
|
135
|
+
}
|
|
136
|
+
else {
|
|
137
|
+
console.warn('[logxer] Invalid logxer-debug.json: missing "scoping" field');
|
|
138
|
+
cachedConfig = null;
|
|
139
|
+
return null;
|
|
140
|
+
}
|
|
141
|
+
}
|
|
142
|
+
catch (parseError) {
|
|
143
|
+
console.warn('[logxer] Failed to parse logxer-debug.json:', parseError);
|
|
144
|
+
cachedConfig = null;
|
|
145
|
+
return null;
|
|
146
|
+
}
|
|
147
|
+
}
|
|
148
|
+
// Move up one directory
|
|
149
|
+
const parentDir = path.dirname(currentDir);
|
|
150
|
+
if (parentDir === currentDir) {
|
|
151
|
+
// Reached root, stop searching
|
|
152
|
+
break;
|
|
153
|
+
}
|
|
154
|
+
currentDir = parentDir;
|
|
155
|
+
}
|
|
156
|
+
// File not found - cache null result
|
|
157
|
+
cachedConfig = null;
|
|
158
|
+
return null;
|
|
159
|
+
}
|
|
160
|
+
catch (error) {
|
|
161
|
+
// If any error occurs, return null and cache it
|
|
162
|
+
cachedConfig = null;
|
|
163
|
+
return null;
|
|
164
|
+
}
|
|
165
|
+
}
|
|
166
|
+
/**
|
|
167
|
+
* Reset the cached debug config (useful for testing)
|
|
168
|
+
*/
|
|
169
|
+
function resetDebugConfigCache() {
|
|
170
|
+
cachedConfig = undefined;
|
|
171
|
+
}
|
|
172
|
+
//# sourceMappingURL=debug-config.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"debug-config.js","sourceRoot":"","sources":["../../src/utils/debug-config.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Package-level log threshold via `<packagePrefix>_LOGS_LEVEL` (canonical contract).
|
|
3
|
+
* See docs/package-usage.md in this package.
|
|
4
|
+
*/
|
|
5
|
+
import type { LogLevel } from '../types';
|
|
6
|
+
/**
|
|
7
|
+
* Environment variable name for the canonical package log threshold: `<PREFIX>_LOGS_LEVEL`.
|
|
8
|
+
*/
|
|
9
|
+
export declare function packageLogsLevelEnvKey(envPrefix: string): string;
|
|
10
|
+
/**
|
|
11
|
+
* Legacy env var: `<PREFIX>_LOG_LEVEL` (still supported when `_LOGS_LEVEL` is unset).
|
|
12
|
+
*/
|
|
13
|
+
export declare function legacyPackageLogLevelEnvKey(envPrefix: string): string;
|
|
14
|
+
/**
|
|
15
|
+
* Parse a single value (case-insensitive). Unknown values are treated as disabled (off).
|
|
16
|
+
* Empty or whitespace-only string is treated as off.
|
|
17
|
+
*/
|
|
18
|
+
export declare function parsePackageLogsLevelString(raw: string | undefined): {
|
|
19
|
+
packageLogsDisabled: boolean;
|
|
20
|
+
logLevel?: LogLevel;
|
|
21
|
+
};
|
|
22
|
+
export interface ResolvePackageLogsLevelOptions {
|
|
23
|
+
envPrefix: string;
|
|
24
|
+
/** Programmatic override β wins over environment. */
|
|
25
|
+
userLogLevel?: LogLevel;
|
|
26
|
+
/** For tests; defaults to `process.env`. */
|
|
27
|
+
env?: NodeJS.ProcessEnv;
|
|
28
|
+
}
|
|
29
|
+
/**
|
|
30
|
+
* Resolve package log threshold for a logger instance.
|
|
31
|
+
*
|
|
32
|
+
* Precedence: `userLogLevel` β `<PREFIX>_LOGS_LEVEL` (if set in env) β `<PREFIX>_LOG_LEVEL` (legacy, if set) β **`warn`** (neither key set in env).
|
|
33
|
+
*
|
|
34
|
+
* When silent, `logLevel` in the result is `'error'` as a placeholder for internal storage; emission is gated by `packageLogsDisabled`.
|
|
35
|
+
*/
|
|
36
|
+
export declare function resolvePackageLogsLevel(options: ResolvePackageLogsLevelOptions): {
|
|
37
|
+
packageLogsDisabled: boolean;
|
|
38
|
+
logLevel: LogLevel;
|
|
39
|
+
};
|
|
40
|
+
//# sourceMappingURL=package-logs-level.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"package-logs-level.d.ts","sourceRoot":"","sources":["../../src/utils/package-logs-level.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,UAAU,CAAC;AAYzC;;GAEG;AACH,wBAAgB,sBAAsB,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,CAEhE;AAED;;GAEG;AACH,wBAAgB,2BAA2B,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,CAErE;AAED;;;GAGG;AACH,wBAAgB,2BAA2B,CAAC,GAAG,EAAE,MAAM,GAAG,SAAS,GAAG;IACpE,mBAAmB,EAAE,OAAO,CAAC;IAC7B,QAAQ,CAAC,EAAE,QAAQ,CAAC;CACrB,CAaA;AAED,MAAM,WAAW,8BAA8B;IAC7C,SAAS,EAAE,MAAM,CAAC;IAClB,qDAAqD;IACrD,YAAY,CAAC,EAAE,QAAQ,CAAC;IACxB,4CAA4C;IAC5C,GAAG,CAAC,EAAE,MAAM,CAAC,UAAU,CAAC;CACzB;AAED;;;;;;GAMG;AACH,wBAAgB,uBAAuB,CACrC,OAAO,EAAE,8BAA8B,GACtC;IAAE,mBAAmB,EAAE,OAAO,CAAC;IAAC,QAAQ,EAAE,QAAQ,CAAA;CAAE,CA2BtD"}
|
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Package-level log threshold via `<packagePrefix>_LOGS_LEVEL` (canonical contract).
|
|
4
|
+
* See docs/package-usage.md in this package.
|
|
5
|
+
*/
|
|
6
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
7
|
+
exports.packageLogsLevelEnvKey = packageLogsLevelEnvKey;
|
|
8
|
+
exports.legacyPackageLogLevelEnvKey = legacyPackageLogLevelEnvKey;
|
|
9
|
+
exports.parsePackageLogsLevelString = parsePackageLogsLevelString;
|
|
10
|
+
exports.resolvePackageLogsLevel = resolvePackageLogsLevel;
|
|
11
|
+
const OFF_SYNONYMS = new Set(['off', 'none', 'silent']);
|
|
12
|
+
const LEVEL_ALIASES = {
|
|
13
|
+
verbose: 'verbose',
|
|
14
|
+
debug: 'debug',
|
|
15
|
+
info: 'info',
|
|
16
|
+
warn: 'warn',
|
|
17
|
+
error: 'error'
|
|
18
|
+
};
|
|
19
|
+
/**
|
|
20
|
+
* Environment variable name for the canonical package log threshold: `<PREFIX>_LOGS_LEVEL`.
|
|
21
|
+
*/
|
|
22
|
+
function packageLogsLevelEnvKey(envPrefix) {
|
|
23
|
+
return `${envPrefix}_LOGS_LEVEL`;
|
|
24
|
+
}
|
|
25
|
+
/**
|
|
26
|
+
* Legacy env var: `<PREFIX>_LOG_LEVEL` (still supported when `_LOGS_LEVEL` is unset).
|
|
27
|
+
*/
|
|
28
|
+
function legacyPackageLogLevelEnvKey(envPrefix) {
|
|
29
|
+
return `${envPrefix}_LOG_LEVEL`;
|
|
30
|
+
}
|
|
31
|
+
/**
|
|
32
|
+
* Parse a single value (case-insensitive). Unknown values are treated as disabled (off).
|
|
33
|
+
* Empty or whitespace-only string is treated as off.
|
|
34
|
+
*/
|
|
35
|
+
function parsePackageLogsLevelString(raw) {
|
|
36
|
+
if (raw === undefined) {
|
|
37
|
+
return { packageLogsDisabled: true };
|
|
38
|
+
}
|
|
39
|
+
const n = raw.trim().toLowerCase();
|
|
40
|
+
if (n.length === 0 || OFF_SYNONYMS.has(n)) {
|
|
41
|
+
return { packageLogsDisabled: true };
|
|
42
|
+
}
|
|
43
|
+
const level = LEVEL_ALIASES[n];
|
|
44
|
+
if (level) {
|
|
45
|
+
return { packageLogsDisabled: false, logLevel: level };
|
|
46
|
+
}
|
|
47
|
+
return { packageLogsDisabled: true };
|
|
48
|
+
}
|
|
49
|
+
/**
|
|
50
|
+
* Resolve package log threshold for a logger instance.
|
|
51
|
+
*
|
|
52
|
+
* Precedence: `userLogLevel` β `<PREFIX>_LOGS_LEVEL` (if set in env) β `<PREFIX>_LOG_LEVEL` (legacy, if set) β **`warn`** (neither key set in env).
|
|
53
|
+
*
|
|
54
|
+
* When silent, `logLevel` in the result is `'error'` as a placeholder for internal storage; emission is gated by `packageLogsDisabled`.
|
|
55
|
+
*/
|
|
56
|
+
function resolvePackageLogsLevel(options) {
|
|
57
|
+
const { envPrefix, userLogLevel, env = process.env } = options;
|
|
58
|
+
if (userLogLevel !== undefined) {
|
|
59
|
+
return { packageLogsDisabled: false, logLevel: userLogLevel };
|
|
60
|
+
}
|
|
61
|
+
const logsKey = packageLogsLevelEnvKey(envPrefix);
|
|
62
|
+
const legacyKey = legacyPackageLogLevelEnvKey(envPrefix);
|
|
63
|
+
if (Object.prototype.hasOwnProperty.call(env, logsKey)) {
|
|
64
|
+
const parsed = parsePackageLogsLevelString(env[logsKey]);
|
|
65
|
+
if (parsed.packageLogsDisabled || !parsed.logLevel) {
|
|
66
|
+
return { packageLogsDisabled: true, logLevel: 'error' };
|
|
67
|
+
}
|
|
68
|
+
return { packageLogsDisabled: false, logLevel: parsed.logLevel };
|
|
69
|
+
}
|
|
70
|
+
if (Object.prototype.hasOwnProperty.call(env, legacyKey)) {
|
|
71
|
+
const parsed = parsePackageLogsLevelString(env[legacyKey]);
|
|
72
|
+
if (parsed.packageLogsDisabled || !parsed.logLevel) {
|
|
73
|
+
return { packageLogsDisabled: true, logLevel: 'error' };
|
|
74
|
+
}
|
|
75
|
+
return { packageLogsDisabled: false, logLevel: parsed.logLevel };
|
|
76
|
+
}
|
|
77
|
+
return { packageLogsDisabled: false, logLevel: 'warn' };
|
|
78
|
+
}
|
|
79
|
+
//# sourceMappingURL=package-logs-level.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"package-logs-level.js","sourceRoot":"","sources":["../../src/utils/package-logs-level.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,155 @@
|
|
|
1
|
+
# Package logging via `.env` (logs-gateway)
|
|
2
|
+
|
|
3
|
+
**Canonical contract** for npm packages that emit diagnostics through **[logs-gateway](https://www.npmjs.com/package/logs-gateway)**.
|
|
4
|
+
|
|
5
|
+
- **Per package:** only **logs level** is configured with that packageβs **package prefix** on the variable name.
|
|
6
|
+
- **Cross-cutting (once per app / process):** where logs go (console, file, unified, β¦) and **format** are **not** repeated per packageβthey are shared for the whole host. Downstream wiring implements that split; this doc defines the **package-level** part only.
|
|
7
|
+
|
|
8
|
+
**Default when neither `<packagePrefix>_LOGS_LEVEL` nor `<packagePrefix>_LOG_LEVEL` is set in the environment:** **`warn`** (emit **`warn`** and **`error`** only). To silence a package, set **`off`** (or synonyms **`none`** / **`silent`**). To see **`info`**, **`debug`**, or **`verbose`**, raise the level explicitly.
|
|
9
|
+
|
|
10
|
+
**Package prefix** is the short token a package owns for its **single** logs-gateway-related variable in this contract (illustrative examples: **`MY_LIB`**, **`EXAMPLE_SVC`**). Each package documents its own prefix in its README.
|
|
11
|
+
|
|
12
|
+
**logs-gateway** implements this contract inside `createLogger` / `LogsGateway`. It also exposes **`resolvePackageLogsLevel`**, **`parsePackageLogsLevelString`**, **`packageLogsLevelEnvKey`**, and **`legacyPackageLogLevelEnvKey`** for the same rules outside the gateway if needed.
|
|
13
|
+
|
|
14
|
+
---
|
|
15
|
+
|
|
16
|
+
## For package authors β how to implement
|
|
17
|
+
|
|
18
|
+
1. **Depend on** `logs-gateway` (normal `dependencies` for a library that logs).
|
|
19
|
+
2. **Choose a stable prefix** (short acronym, not the full scoped npm name). Use the same string for **`envPrefix`** and for documenting the env var (e.g. **`MY_LIB`** β **`MY_LIB_LOGS_LEVEL`**).
|
|
20
|
+
3. **Create one logger** (or one per logical surface, each with its own prefix if you truly need separate togglesβusually one prefix per package):
|
|
21
|
+
|
|
22
|
+
```typescript
|
|
23
|
+
import { createLogger } from 'logs-gateway';
|
|
24
|
+
|
|
25
|
+
export const logger = createLogger({
|
|
26
|
+
packageName: 'MyLib', // label in log lines
|
|
27
|
+
envPrefix: 'MY_LIB', // reads MY_LIB_LOGS_LEVEL / MY_LIB_LOG_LEVEL
|
|
28
|
+
debugNamespace: 'my-lib' // optional: DEBUG namespace
|
|
29
|
+
});
|
|
30
|
+
```
|
|
31
|
+
|
|
32
|
+
4. **Emit using gateway levels** β `logger.error`, `logger.warn`, `logger.info`, `logger.debug`, `logger.verbose`. What actually appears is filtered by the resolved **minimum level** (see table below).
|
|
33
|
+
5. **Document for consumers** in your README: the prefix, the exact key **`<prefix>_LOGS_LEVEL`**, allowed values, and that **default is `warn`** if the variable is not set (and legacy **`_LOG_LEVEL`** is not set).
|
|
34
|
+
6. **Optional programmatic default** β pass **`logLevel`** in the second argument to **`createLogger`** only when you need a non-env default (it overrides env for that instance).
|
|
35
|
+
|
|
36
|
+
You do **not** need to read **`process.env`** for the level yourself if you use **`createLogger`** / **`LogsGateway`**; resolution is built in.
|
|
37
|
+
|
|
38
|
+
---
|
|
39
|
+
|
|
40
|
+
## For apps and operators β downstream (different levels per package)
|
|
41
|
+
|
|
42
|
+
Integrators tune **verbosity per dependency** by setting **one variable per package prefix** in **`.env`** (or the hostβs secret/config store). That flows **downstream** into each libraryβs logger without code changes:
|
|
43
|
+
|
|
44
|
+
```dotenv
|
|
45
|
+
# Quieter third-party package; louder in-house library
|
|
46
|
+
EXAMPLE_GATEWAY_LOGS_LEVEL=error
|
|
47
|
+
MY_LIB_LOGS_LEVEL=info
|
|
48
|
+
|
|
49
|
+
# Turn one package off entirely
|
|
50
|
+
OTHER_PKG_LOGS_LEVEL=off
|
|
51
|
+
```
|
|
52
|
+
|
|
53
|
+
Cross-cutting knobs (**where** logs go, **format**, file paths, unified sink, etc.) are configured **once** for the host (see logs-gateway README), not duplicated per package prefix.
|
|
54
|
+
|
|
55
|
+
---
|
|
56
|
+
|
|
57
|
+
## 1. Package-level variable (only): `<packagePrefix>_LOGS_LEVEL`
|
|
58
|
+
|
|
59
|
+
```dotenv
|
|
60
|
+
MY_LIB_LOGS_LEVEL=warn
|
|
61
|
+
```
|
|
62
|
+
|
|
63
|
+
Pattern: **`<packagePrefix>_LOGS_LEVEL`**.
|
|
64
|
+
|
|
65
|
+
- If **both** **`<packagePrefix>_LOGS_LEVEL`** and **`<packagePrefix>_LOG_LEVEL`** are **absent** from the environment, **logs-gateway** uses **`warn`** as the effective threshold.
|
|
66
|
+
- **`off`** (or **`none`** / **`silent`**) means that package does **not** emit diagnostic logs (regardless of cross-cutting sink configuration).
|
|
67
|
+
|
|
68
|
+
No other **package-prefixed** `.env` keys are part of this contractβ**not** `<packagePrefix>_LOG_TO_CONSOLE`, `<packagePrefix>_LOG_TO_FILE`, `<packagePrefix>_LOG_FORMAT`, etc. Those belong to **cross-cutting** configuration.
|
|
69
|
+
|
|
70
|
+
---
|
|
71
|
+
|
|
72
|
+
## 2. Allowed values for `<packagePrefix>_LOGS_LEVEL`
|
|
73
|
+
|
|
74
|
+
| Value | Meaning |
|
|
75
|
+
|--------|---------|
|
|
76
|
+
| **`off`** | Package diagnostics disabled (`none` / `silent` are synonyms). |
|
|
77
|
+
| **`error`** | Emit **`error`** only. |
|
|
78
|
+
| **`warn`** | Emit **`warn`** and **`error`**. |
|
|
79
|
+
| **`info`** | Emit **`info`** and above. |
|
|
80
|
+
| **`debug`** | Emit **`debug`** and above. |
|
|
81
|
+
| **`verbose`** | Most verbose. |
|
|
82
|
+
|
|
83
|
+
**Default when the env keys are not set:** **`warn`** (see Β§1).
|
|
84
|
+
|
|
85
|
+
Case-insensitive values are recommended; **logs-gateway** normalizes case when parsing.
|
|
86
|
+
|
|
87
|
+
Unknown values are treated as **`off`** (silent) in **logs-gateway**.
|
|
88
|
+
|
|
89
|
+
**Precedence in env:** if **both** **`_LOGS_LEVEL`** and **`_LOG_LEVEL`** are set, **`_LOGS_LEVEL`** wins. If only **`_LOG_LEVEL`** is set (legacy), it is used the same way as **`_LOGS_LEVEL`**.
|
|
90
|
+
|
|
91
|
+
---
|
|
92
|
+
|
|
93
|
+
## 3. Cross-cutting configuration (shared across packages)
|
|
94
|
+
|
|
95
|
+
**Console, file, log file path, text/json/table format, unified logger, and similar** are **application- or host-level** concerns. They apply **once** to the process, not once per library prefix.
|
|
96
|
+
|
|
97
|
+
- A package with **`_LOGS_LEVEL=off`** must not emit diagnostics; host settings do not override that.
|
|
98
|
+
- When the package level is not **`off`**, lines use the **same** shared sinks and format as other packages that are allowed to emit.
|
|
99
|
+
|
|
100
|
+
Exact host variable names are in **logs-gateway** and application docs; they are not **`<packagePrefix>_β¦`** patterns in this contract.
|
|
101
|
+
|
|
102
|
+
---
|
|
103
|
+
|
|
104
|
+
## 4. Choosing the package prefix
|
|
105
|
+
|
|
106
|
+
- Prefer a **stable acronym or short name**, not the full scoped npm name.
|
|
107
|
+
- Example (illustrative): **`@acme/example-lib`** might use **`EXAMPLE_LIB`**βpick one and keep it.
|
|
108
|
+
|
|
109
|
+
Document the prefix and **`<prefix>_LOGS_LEVEL`** in the package README.
|
|
110
|
+
|
|
111
|
+
---
|
|
112
|
+
|
|
113
|
+
## 5. Example `.env` (placeholders)
|
|
114
|
+
|
|
115
|
+
**Per package (levels only):**
|
|
116
|
+
|
|
117
|
+
```dotenv
|
|
118
|
+
MY_LIB_LOGS_LEVEL=warn
|
|
119
|
+
EXAMPLE_GATEWAY_LOGS_LEVEL=info
|
|
120
|
+
|
|
121
|
+
# Silence or debug one layer
|
|
122
|
+
OTHER_PKG_LOGS_LEVEL=off
|
|
123
|
+
MY_LIB_LOGS_LEVEL=debug
|
|
124
|
+
```
|
|
125
|
+
|
|
126
|
+
**Cross-cutting (illustrativeβhost / logs-gateway global keys):**
|
|
127
|
+
|
|
128
|
+
```dotenv
|
|
129
|
+
# LOG_TO_CONSOLE=true
|
|
130
|
+
# LOG_FORMAT=json
|
|
131
|
+
```
|
|
132
|
+
|
|
133
|
+
---
|
|
134
|
+
|
|
135
|
+
## 6. Interaction with process-wide `DEBUG`
|
|
136
|
+
|
|
137
|
+
Some stacks use **`DEBUG`** (comma-separated namespaces). That is separate from this contract:
|
|
138
|
+
|
|
139
|
+
- **`_LOGS_LEVEL=off`** stays authoritative: the package stays silent in **logs-gateway**.
|
|
140
|
+
- **`DEBUG`** can still allow **`verbose`** / **`debug`** lines **only when the package is not silent** (`packageLogsDisabled` is false). See **logs-gateway** README for details.
|
|
141
|
+
|
|
142
|
+
---
|
|
143
|
+
|
|
144
|
+
## 7. Summary
|
|
145
|
+
|
|
146
|
+
| Layer | What is configured |
|
|
147
|
+
|--------|-------------------|
|
|
148
|
+
| **Per package** | **Only** `<packagePrefix>_LOGS_LEVEL` (default **`warn`** when both `_LOGS_LEVEL` and `_LOG_LEVEL` are unset in the environment) |
|
|
149
|
+
| **Cross-cutting** | Console, file, format, unified sink, etc.β**once** for the app / process |
|
|
150
|
+
|
|
151
|
+
---
|
|
152
|
+
|
|
153
|
+
## 8. Migration note
|
|
154
|
+
|
|
155
|
+
If you relied on older behavior where **no** env vars implied **silent** output, set **`{PREFIX}_LOGS_LEVEL=off`** explicitly, or **`{PREFIX}_LOG_LEVEL=off`** if you only use the legacy key.
|
package/docs/package.md
ADDED
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
**donβt use CommonJS** π
|
|
2
|
+
|
|
3
|
+
### Use **ESM only**
|
|
4
|
+
|
|
5
|
+
```json
|
|
6
|
+
{
|
|
7
|
+
"compilerOptions": {
|
|
8
|
+
"target": "ES2022",
|
|
9
|
+
"module": "NodeNext",
|
|
10
|
+
"moduleResolution": "NodeNext"
|
|
11
|
+
}
|
|
12
|
+
}
|
|
13
|
+
```
|
|
14
|
+
|
|
15
|
+
### Why this is the *right* choice **now**
|
|
16
|
+
|
|
17
|
+
* **Native ESM everywhere** (Node 18/20+, Bun, Deno, modern bundlers)
|
|
18
|
+
* Clean `import` / `export`, no interop hacks
|
|
19
|
+
* Future-proof for:
|
|
20
|
+
|
|
21
|
+
* tree-shaking
|
|
22
|
+
* edge / workers
|
|
23
|
+
* package `exports`
|
|
24
|
+
* Matches how *new* libraries are written in 2025β2026
|
|
25
|
+
|
|
26
|
+
### What *not* to do
|
|
27
|
+
|
|
28
|
+
* β `"module": "commonjs"` β legacy, friction, dead-end
|
|
29
|
+
* β `"module": "ES2020"` without `NodeNext` β subtle resolution bugs with Node ESM
|
|
30
|
+
|
|
31
|
+
### Minimal `package.json` you should use
|
|
32
|
+
|
|
33
|
+
```json
|
|
34
|
+
{
|
|
35
|
+
"type": "module",
|
|
36
|
+
"exports": {
|
|
37
|
+
".": "./dist/index.js"
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
```
|
|
41
|
+
|
|
42
|
+
### One important rule (donβt trip on this)
|
|
43
|
+
|
|
44
|
+
* Use **explicit file extensions** in imports:
|
|
45
|
+
|
|
46
|
+
```ts
|
|
47
|
+
import { x } from "./utils.js";
|
|
48
|
+
```
|
|
@@ -0,0 +1,85 @@
|
|
|
1
|
+
# Upgrading `logs-gateway` β instructions for package owners
|
|
2
|
+
|
|
3
|
+
Share this note with maintainers of libraries that depend on **logs-gateway** when they bump to **β₯ 3.5.x** (or your current release line that includes the package-level logging contract).
|
|
4
|
+
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
## 1. Bump the dependency
|
|
8
|
+
|
|
9
|
+
```bash
|
|
10
|
+
npm install logs-gateway@^3.6.0
|
|
11
|
+
```
|
|
12
|
+
|
|
13
|
+
(or whatever minimum version your release notes specify)
|
|
14
|
+
|
|
15
|
+
No code change is **required** if you already use `createLogger({ packageName, envPrefix, ... })` β the gateway reads the new env rules automatically.
|
|
16
|
+
|
|
17
|
+
---
|
|
18
|
+
|
|
19
|
+
## 2. Per-package log level (what changed)
|
|
20
|
+
|
|
21
|
+
| Topic | Detail |
|
|
22
|
+
|--------|--------|
|
|
23
|
+
| **Canonical env var** | **`<PREFIX>_LOGS_LEVEL`** β replace `<PREFIX>` with your **`envPrefix`** (e.g. `MY_LIB` β `MY_LIB_LOGS_LEVEL`). |
|
|
24
|
+
| **Legacy** | **`<PREFIX>_LOG_LEVEL`** still works **only if** `*_LOGS_LEVEL` is **not** set in the environment. |
|
|
25
|
+
| **Default** | If **both** `*_LOGS_LEVEL` and `*_LOG_LEVEL` are **unset**, the effective level is **`warn`** (warn + error only). **Not** `info` and **not** silent. |
|
|
26
|
+
| **Silence** | Set **`off`**, **`none`**, or **`silent`** to disable that packageβs diagnostics. |
|
|
27
|
+
| **Values** | `off` \| `none` \| `silent` \| `error` \| `warn` \| `info` \| `debug` \| `verbose` (case-insensitive). |
|
|
28
|
+
|
|
29
|
+
**You still choose** a stable **`envPrefix`** once and document it in your README. logs-gateway does **not** infer it from the npm package name.
|
|
30
|
+
|
|
31
|
+
---
|
|
32
|
+
|
|
33
|
+
## 3. What to document for your users
|
|
34
|
+
|
|
35
|
+
Add to your README (or link to this section):
|
|
36
|
+
|
|
37
|
+
1. **One line** naming your prefix, e.g. βLog level env: **`MY_LIB_LOGS_LEVEL`**.β
|
|
38
|
+
2. **Default** when unset: **`warn`** (unless they set legacy `MY_LIB_LOG_LEVEL`).
|
|
39
|
+
3. **Example** to raise verbosity: `MY_LIB_LOGS_LEVEL=info` or `debug`.
|
|
40
|
+
4. **Example** to silence: `MY_LIB_LOGS_LEVEL=off`.
|
|
41
|
+
|
|
42
|
+
Cross-cutting options (console, file, format, unified sink) stay **host/app** configuration β see **logs-gateway** README β not duplicated per library prefix.
|
|
43
|
+
|
|
44
|
+
---
|
|
45
|
+
|
|
46
|
+
## 4. Optional: use the same rules outside `LogsGateway`
|
|
47
|
+
|
|
48
|
+
If you need the same resolution in code (e.g. custom bootstrap), import:
|
|
49
|
+
|
|
50
|
+
```typescript
|
|
51
|
+
import {
|
|
52
|
+
resolvePackageLogsLevel,
|
|
53
|
+
parsePackageLogsLevelString,
|
|
54
|
+
packageLogsLevelEnvKey,
|
|
55
|
+
legacyPackageLogLevelEnvKey
|
|
56
|
+
} from 'logs-gateway';
|
|
57
|
+
```
|
|
58
|
+
|
|
59
|
+
- **`resolvePackageLogsLevel({ envPrefix, userLogLevel?, env? })`** β same precedence as `createLogger`.
|
|
60
|
+
- **`parsePackageLogsLevelString(raw)`** β parse a single value string.
|
|
61
|
+
- **`packageLogsLevelEnvKey(prefix)`** / **`legacyPackageLogLevelEnvKey(prefix)`** β build env key names.
|
|
62
|
+
|
|
63
|
+
---
|
|
64
|
+
|
|
65
|
+
## 5. Behavior to watch after upgrade
|
|
66
|
+
|
|
67
|
+
| Situation | What to expect |
|
|
68
|
+
|-----------|----------------|
|
|
69
|
+
| **No env vars** for level | More **`warn`** / **`error`** line**s** than before if you relied on **silent** default; set **`PREFIX_LOGS_LEVEL=off`** to silence. |
|
|
70
|
+
| **`DEBUG` env** | Still elevates **`verbose`** / **`debug`** only when the package is **not** fully silent (`off`). |
|
|
71
|
+
| **`getConfig()`** | Includes **`packageLogsDisabled`** when the effective level is **`off`**. |
|
|
72
|
+
|
|
73
|
+
---
|
|
74
|
+
|
|
75
|
+
## 6. Full contract
|
|
76
|
+
|
|
77
|
+
See **`docs/package-usage.md`** in the **logs-gateway** package (also on npm).
|
|
78
|
+
|
|
79
|
+
---
|
|
80
|
+
|
|
81
|
+
## Short blurb (copy-paste for your changelog)
|
|
82
|
+
|
|
83
|
+
> Upgraded **logs-gateway**. Per-package verbosity is controlled with **`YOUR_PREFIX_LOGS_LEVEL`** (canonical); legacy **`YOUR_PREFIX_LOG_LEVEL`** remains if the new var is unset. Default when both are unset is **`warn`**. Set **`YOUR_PREFIX_LOGS_LEVEL=off`** to disable. See [logs-gateway `docs/package-usage.md`](https://github.com/nx-intelligence/logs-gateway/blob/main/docs/package-usage.md) for details.
|
|
84
|
+
|
|
85
|
+
Replace **`YOUR_PREFIX`** with your documented prefix.
|