@aztec/foundation 0.65.2 → 0.66.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/dest/async-pool/index.d.ts +3 -0
- package/dest/async-pool/index.d.ts.map +1 -0
- package/dest/async-pool/index.js +50 -0
- package/dest/collection/array.d.ts +14 -0
- package/dest/collection/array.d.ts.map +1 -1
- package/dest/collection/array.js +23 -1
- package/dest/config/env_var.d.ts +1 -1
- package/dest/config/env_var.d.ts.map +1 -1
- package/dest/crypto/random/randomness_singleton.js +2 -2
- package/dest/json-rpc/client/safe_json_rpc_client.d.ts +1 -1
- package/dest/json-rpc/client/safe_json_rpc_client.d.ts.map +1 -1
- package/dest/json-rpc/client/safe_json_rpc_client.js +2 -2
- package/dest/json-rpc/server/safe_json_rpc_server.d.ts +2 -2
- package/dest/json-rpc/server/safe_json_rpc_server.d.ts.map +1 -1
- package/dest/log/index.d.ts +1 -1
- package/dest/log/index.d.ts.map +1 -1
- package/dest/log/index.js +2 -2
- package/dest/log/log-filters.d.ts +7 -0
- package/dest/log/log-filters.d.ts.map +1 -0
- package/dest/log/log-filters.js +43 -0
- package/dest/log/log-levels.d.ts +3 -0
- package/dest/log/log-levels.d.ts.map +1 -0
- package/dest/log/log-levels.js +2 -0
- package/dest/log/pino-logger.d.ts +39 -0
- package/dest/log/pino-logger.d.ts.map +1 -0
- package/dest/log/pino-logger.js +146 -0
- package/dest/queue/base_memory_queue.d.ts +1 -1
- package/dest/queue/base_memory_queue.d.ts.map +1 -1
- package/dest/queue/bounded_serial_queue.d.ts +1 -1
- package/dest/queue/bounded_serial_queue.d.ts.map +1 -1
- package/dest/queue/fifo_memory_queue.d.ts +1 -1
- package/dest/queue/fifo_memory_queue.d.ts.map +1 -1
- package/dest/retry/index.d.ts +1 -1
- package/dest/retry/index.d.ts.map +1 -1
- package/dest/transport/dispatch/create_dispatch_fn.d.ts +1 -1
- package/dest/transport/dispatch/create_dispatch_fn.d.ts.map +1 -1
- package/package.json +6 -2
- package/src/async-pool/index.ts +50 -0
- package/src/collection/array.ts +24 -0
- package/src/config/env_var.ts +15 -1
- package/src/crypto/random/randomness_singleton.ts +1 -1
- package/src/json-rpc/client/safe_json_rpc_client.ts +1 -1
- package/src/log/index.ts +1 -1
- package/src/log/log-filters.ts +49 -0
- package/src/log/log-levels.ts +3 -0
- package/src/log/pino-logger.ts +196 -0
- package/src/queue/fifo_memory_queue.ts +1 -1
- package/dest/log/logger.d.ts +0 -57
- package/dest/log/logger.d.ts.map +0 -1
- package/dest/log/logger.js +0 -139
- package/src/log/logger.ts +0 -179
package/dest/log/logger.js
DELETED
|
@@ -1,139 +0,0 @@
|
|
|
1
|
-
import debug from 'debug';
|
|
2
|
-
import { inspect } from 'util';
|
|
3
|
-
const LogLevels = ['silent', 'error', 'warn', 'info', 'verbose', 'debug'];
|
|
4
|
-
function getLogLevel() {
|
|
5
|
-
const envLogLevel = process.env.LOG_LEVEL?.toLowerCase();
|
|
6
|
-
let defaultLogLevel = 'info';
|
|
7
|
-
if (process.env.DEBUG) {
|
|
8
|
-
// if we set DEBUG to a non-empty string, use debug as default
|
|
9
|
-
defaultLogLevel = 'debug';
|
|
10
|
-
}
|
|
11
|
-
else if (process.env.NODE_ENV === 'test') {
|
|
12
|
-
// otherwise, be silent in tests as these are frequently ran en-masse
|
|
13
|
-
defaultLogLevel = 'silent';
|
|
14
|
-
}
|
|
15
|
-
return LogLevels.includes(envLogLevel) ? envLogLevel : defaultLogLevel;
|
|
16
|
-
}
|
|
17
|
-
export let currentLevel = getLogLevel();
|
|
18
|
-
const logElapsedTime = ['1', 'true'].includes(process.env.LOG_ELAPSED_TIME ?? '');
|
|
19
|
-
const firstTimestamp = Date.now();
|
|
20
|
-
function filterNegativePatterns(debugString) {
|
|
21
|
-
return debugString
|
|
22
|
-
.split(',')
|
|
23
|
-
.filter(p => !p.startsWith('-'))
|
|
24
|
-
.join(',');
|
|
25
|
-
}
|
|
26
|
-
function extractNegativePatterns(debugString) {
|
|
27
|
-
return (debugString
|
|
28
|
-
.split(',')
|
|
29
|
-
.filter(p => p.startsWith('-'))
|
|
30
|
-
// Remove the leading '-' from the pattern
|
|
31
|
-
.map(p => p.slice(1)));
|
|
32
|
-
}
|
|
33
|
-
const namespaces = process.env.DEBUG ?? 'aztec:*';
|
|
34
|
-
debug.enable(filterNegativePatterns(namespaces));
|
|
35
|
-
/**
|
|
36
|
-
* Creates a new DebugLogger for the current module, defaulting to the LOG_LEVEL env var.
|
|
37
|
-
* If DEBUG="[module]" env is set, will enable debug logging if the module matches.
|
|
38
|
-
* Uses npm debug for debug level and console.error for other levels.
|
|
39
|
-
* @param name - Name of the module.
|
|
40
|
-
* @param fixedLogData - Additional data to include in the log message.
|
|
41
|
-
* @usage createDebugLogger('aztec:validator');
|
|
42
|
-
* // will always add the validator address to the log labels
|
|
43
|
-
* @returns A debug logger.
|
|
44
|
-
*/
|
|
45
|
-
export function createDebugLogger(name) {
|
|
46
|
-
const debugLogger = debug(name);
|
|
47
|
-
const negativePatterns = extractNegativePatterns(namespaces);
|
|
48
|
-
const accepted = () => {
|
|
49
|
-
return !negativePatterns.some(pattern => name.match(pattern));
|
|
50
|
-
};
|
|
51
|
-
const log = (level, msg, data) => {
|
|
52
|
-
if (accepted()) {
|
|
53
|
-
logWithDebug(debugLogger, level, msg, data);
|
|
54
|
-
}
|
|
55
|
-
};
|
|
56
|
-
const logger = {
|
|
57
|
-
silent: () => { },
|
|
58
|
-
error: (msg, err, data) => log('error', fmtErr(msg, err), data),
|
|
59
|
-
warn: (msg, data) => log('warn', msg, data),
|
|
60
|
-
info: (msg, data) => log('info', msg, data),
|
|
61
|
-
verbose: (msg, data) => log('verbose', msg, data),
|
|
62
|
-
debug: (msg, data) => log('debug', msg, data),
|
|
63
|
-
};
|
|
64
|
-
return Object.assign((msg, data) => log('debug', msg, data), logger);
|
|
65
|
-
}
|
|
66
|
-
/**
|
|
67
|
-
* A function to create a logger that automatically includes fixed data in each log entry.
|
|
68
|
-
* @param debugLogger - The base DebugLogger instance to which we attach fixed log data.
|
|
69
|
-
* @param fixedLogData - The data to be included in every log entry.
|
|
70
|
-
* @returns A DebugLogger with log level methods (error, warn, info, verbose, debug) that
|
|
71
|
-
* automatically attach `fixedLogData` to every log message.
|
|
72
|
-
*/
|
|
73
|
-
export function attachedFixedDataToLogger(debugLogger, fixedLogData) {
|
|
74
|
-
// Helper function to merge fixed data with additional data passed to log entries.
|
|
75
|
-
const attach = (data) => ({ ...fixedLogData, ...data });
|
|
76
|
-
// Define the logger with all the necessary log level methods.
|
|
77
|
-
const logger = {
|
|
78
|
-
// Silent log level does nothing.
|
|
79
|
-
silent: () => { },
|
|
80
|
-
error: (msg, err, data) => debugLogger.error(fmtErr(msg, err), attach(data)),
|
|
81
|
-
warn: (msg, data) => debugLogger.warn(msg, attach(data)),
|
|
82
|
-
info: (msg, data) => debugLogger.info(msg, attach(data)),
|
|
83
|
-
verbose: (msg, data) => debugLogger.verbose(msg, attach(data)),
|
|
84
|
-
debug: (msg, data) => debugLogger.debug(msg, attach(data)),
|
|
85
|
-
};
|
|
86
|
-
return Object.assign((msg, data) => debugLogger.debug(msg, attach(data)), logger);
|
|
87
|
-
}
|
|
88
|
-
const logHandlers = [];
|
|
89
|
-
/**
|
|
90
|
-
* Registers a callback for all logs, whether they are emitted in the current log level or not.
|
|
91
|
-
* @param handler - Callback to be called on every log.
|
|
92
|
-
*/
|
|
93
|
-
export function onLog(handler) {
|
|
94
|
-
logHandlers.push(handler);
|
|
95
|
-
}
|
|
96
|
-
/** Overrides current log level. */
|
|
97
|
-
export function setLevel(level) {
|
|
98
|
-
currentLevel = level;
|
|
99
|
-
}
|
|
100
|
-
/**
|
|
101
|
-
* Logs args to npm debug if enabled or log level is debug, console.error otherwise.
|
|
102
|
-
* @param debug - Instance of npm debug.
|
|
103
|
-
* @param level - Intended log level.
|
|
104
|
-
* @param args - Args to log.
|
|
105
|
-
*/
|
|
106
|
-
function logWithDebug(debug, level, msg, data) {
|
|
107
|
-
for (const handler of logHandlers) {
|
|
108
|
-
handler(level, debug.namespace, msg, data);
|
|
109
|
-
}
|
|
110
|
-
msg = data ? `${msg} ${fmtLogData(data)}` : msg;
|
|
111
|
-
if (debug.enabled && LogLevels.indexOf(level) <= LogLevels.indexOf(currentLevel)) {
|
|
112
|
-
if (logElapsedTime) {
|
|
113
|
-
const ts = ((Date.now() - firstTimestamp) / 1000).toFixed(3);
|
|
114
|
-
debug('%ss [%s] %s', ts, level.toUpperCase(), msg);
|
|
115
|
-
}
|
|
116
|
-
else {
|
|
117
|
-
debug('[%s] %s', level.toUpperCase(), msg);
|
|
118
|
-
}
|
|
119
|
-
}
|
|
120
|
-
}
|
|
121
|
-
/**
|
|
122
|
-
* Concatenates a log message and an exception.
|
|
123
|
-
* @param msg - Log message
|
|
124
|
-
* @param err - Error to log
|
|
125
|
-
* @returns A string with both the log message and the error message.
|
|
126
|
-
*/
|
|
127
|
-
function fmtErr(msg, err) {
|
|
128
|
-
return err ? `${msg}: ${inspect(err)}` : msg;
|
|
129
|
-
}
|
|
130
|
-
/**
|
|
131
|
-
* Formats structured log data as a string for console output.
|
|
132
|
-
* @param data - Optional log data.
|
|
133
|
-
*/
|
|
134
|
-
export function fmtLogData(data) {
|
|
135
|
-
return Object.entries(data ?? {})
|
|
136
|
-
.map(([key, value]) => `${key}=${typeof value === 'object' && 'toString' in value ? value.toString() : value}`)
|
|
137
|
-
.join(' ');
|
|
138
|
-
}
|
|
139
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibG9nZ2VyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2xvZy9sb2dnZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxLQUFLLE1BQU0sT0FBTyxDQUFDO0FBQzFCLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFJL0IsTUFBTSxTQUFTLEdBQUcsQ0FBQyxRQUFRLEVBQUUsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsU0FBUyxFQUFFLE9BQU8sQ0FBVSxDQUFDO0FBT25GLFNBQVMsV0FBVztJQUNsQixNQUFNLFdBQVcsR0FBRyxPQUFPLENBQUMsR0FBRyxDQUFDLFNBQVMsRUFBRSxXQUFXLEVBQWMsQ0FBQztJQUNyRSxJQUFJLGVBQWUsR0FBYSxNQUFNLENBQUM7SUFDdkMsSUFBSSxPQUFPLENBQUMsR0FBRyxDQUFDLEtBQUssRUFBRSxDQUFDO1FBQ3RCLDhEQUE4RDtRQUM5RCxlQUFlLEdBQUcsT0FBTyxDQUFDO0lBQzVCLENBQUM7U0FBTSxJQUFJLE9BQU8sQ0FBQyxHQUFHLENBQUMsUUFBUSxLQUFLLE1BQU0sRUFBRSxDQUFDO1FBQzNDLHFFQUFxRTtRQUNyRSxlQUFlLEdBQUcsUUFBUSxDQUFDO0lBQzdCLENBQUM7SUFDRCxPQUFPLFNBQVMsQ0FBQyxRQUFRLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQyxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsZUFBZSxDQUFDO0FBQ3pFLENBQUM7QUFFRCxNQUFNLENBQUMsSUFBSSxZQUFZLEdBQUcsV0FBVyxFQUFFLENBQUM7QUFFeEMsTUFBTSxjQUFjLEdBQUcsQ0FBQyxHQUFHLEVBQUUsTUFBTSxDQUFDLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsZ0JBQWdCLElBQUksRUFBRSxDQUFDLENBQUM7QUFDbEYsTUFBTSxjQUFjLEdBQVcsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDO0FBRTFDLFNBQVMsc0JBQXNCLENBQUMsV0FBbUI7SUFDakQsT0FBTyxXQUFXO1NBQ2YsS0FBSyxDQUFDLEdBQUcsQ0FBQztTQUNWLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUMsQ0FBQztTQUMvQixJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDZixDQUFDO0FBQ0QsU0FBUyx1QkFBdUIsQ0FBQyxXQUFtQjtJQUNsRCxPQUFPLENBQ0wsV0FBVztTQUNSLEtBQUssQ0FBQyxHQUFHLENBQUM7U0FDVixNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQy9CLDBDQUEwQztTQUN6QyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQ3hCLENBQUM7QUFDSixDQUFDO0FBRUQsTUFBTSxVQUFVLEdBQUcsT0FBTyxDQUFDLEdBQUcsQ0FBQyxLQUFLLElBQUksU0FBUyxDQUFDO0FBQ2xELEtBQUssQ0FBQyxNQUFNLENBQUMsc0JBQXNCLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQztBQWdCakQ7Ozs7Ozs7OztHQVNHO0FBRUgsTUFBTSxVQUFVLGlCQUFpQixDQUFDLElBQVk7SUFDNUMsTUFBTSxXQUFXLEdBQUcsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDO0lBRWhDLE1BQU0sZ0JBQWdCLEdBQUcsdUJBQXVCLENBQUMsVUFBVSxDQUFDLENBQUM7SUFDN0QsTUFBTSxRQUFRLEdBQUcsR0FBRyxFQUFFO1FBQ3BCLE9BQU8sQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUM7SUFDaEUsQ0FBQyxDQUFDO0lBQ0YsTUFBTSxHQUFHLEdBQUcsQ0FBQyxLQUFlLEVBQUUsR0FBVyxFQUFFLElBQWMsRUFBRSxFQUFFO1FBQzNELElBQUksUUFBUSxFQUFFLEVBQUUsQ0FBQztZQUNmLFlBQVksQ0FBQyxXQUFXLEVBQUUsS0FBSyxFQUFFLEdBQUcsRUFBRSxJQUFJLENBQUMsQ0FBQztRQUM5QyxDQUFDO0lBQ0gsQ0FBQyxDQUFDO0lBQ0YsTUFBTSxNQUFNLEdBQUc7UUFDYixNQUFNLEVBQUUsR0FBRyxFQUFFLEdBQUUsQ0FBQztRQUNoQixLQUFLLEVBQUUsQ0FBQyxHQUFXLEVBQUUsR0FBYSxFQUFFLElBQWMsRUFBRSxFQUFFLENBQUMsR0FBRyxDQUFDLE9BQU8sRUFBRSxNQUFNLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxFQUFFLElBQUksQ0FBQztRQUMzRixJQUFJLEVBQUUsQ0FBQyxHQUFXLEVBQUUsSUFBYyxFQUFFLEVBQUUsQ0FBQyxHQUFHLENBQUMsTUFBTSxFQUFFLEdBQUcsRUFBRSxJQUFJLENBQUM7UUFDN0QsSUFBSSxFQUFFLENBQUMsR0FBVyxFQUFFLElBQWMsRUFBRSxFQUFFLENBQUMsR0FBRyxDQUFDLE1BQU0sRUFBRSxHQUFHLEVBQUUsSUFBSSxDQUFDO1FBQzdELE9BQU8sRUFBRSxDQUFDLEdBQVcsRUFBRSxJQUFjLEVBQUUsRUFBRSxDQUFDLEdBQUcsQ0FBQyxTQUFTLEVBQUUsR0FBRyxFQUFFLElBQUksQ0FBQztRQUNuRSxLQUFLLEVBQUUsQ0FBQyxHQUFXLEVBQUUsSUFBYyxFQUFFLEVBQUUsQ0FBQyxHQUFHLENBQUMsT0FBTyxFQUFFLEdBQUcsRUFBRSxJQUFJLENBQUM7S0FDaEUsQ0FBQztJQUNGLE9BQU8sTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDLEdBQVcsRUFBRSxJQUFjLEVBQUUsRUFBRSxDQUFDLEdBQUcsQ0FBQyxPQUFPLEVBQUUsR0FBRyxFQUFFLElBQUksQ0FBQyxFQUFFLE1BQU0sQ0FBQyxDQUFDO0FBQ3pGLENBQUM7QUFFRDs7Ozs7O0dBTUc7QUFDSCxNQUFNLFVBQVUseUJBQXlCLENBQUMsV0FBd0IsRUFBRSxZQUFxQjtJQUN2RixrRkFBa0Y7SUFDbEYsTUFBTSxNQUFNLEdBQUcsQ0FBQyxJQUFjLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxHQUFHLFlBQVksRUFBRSxHQUFHLElBQUksRUFBRSxDQUFDLENBQUM7SUFDbEUsOERBQThEO0lBQzlELE1BQU0sTUFBTSxHQUFHO1FBQ2IsaUNBQWlDO1FBQ2pDLE1BQU0sRUFBRSxHQUFHLEVBQUUsR0FBRSxDQUFDO1FBQ2hCLEtBQUssRUFBRSxDQUFDLEdBQVcsRUFBRSxHQUFhLEVBQUUsSUFBYyxFQUFFLEVBQUUsQ0FBQyxXQUFXLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLEVBQUUsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ3hHLElBQUksRUFBRSxDQUFDLEdBQVcsRUFBRSxJQUFjLEVBQUUsRUFBRSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsR0FBRyxFQUFFLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUMxRSxJQUFJLEVBQUUsQ0FBQyxHQUFXLEVBQUUsSUFBYyxFQUFFLEVBQUUsQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLEdBQUcsRUFBRSxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDMUUsT0FBTyxFQUFFLENBQUMsR0FBVyxFQUFFLElBQWMsRUFBRSxFQUFFLENBQUMsV0FBVyxDQUFDLE9BQU8sQ0FBQyxHQUFHLEVBQUUsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ2hGLEtBQUssRUFBRSxDQUFDLEdBQVcsRUFBRSxJQUFjLEVBQUUsRUFBRSxDQUFDLFdBQVcsQ0FBQyxLQUFLLENBQUMsR0FBRyxFQUFFLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQztLQUM3RSxDQUFDO0lBQ0YsT0FBTyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUMsR0FBVyxFQUFFLElBQWMsRUFBRSxFQUFFLENBQUMsV0FBVyxDQUFDLEtBQUssQ0FBQyxHQUFHLEVBQUUsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDLEVBQUUsTUFBTSxDQUFDLENBQUM7QUFDdEcsQ0FBQztBQUtELE1BQU0sV0FBVyxHQUFpQixFQUFFLENBQUM7QUFFckM7OztHQUdHO0FBQ0gsTUFBTSxVQUFVLEtBQUssQ0FBQyxPQUFtQjtJQUN2QyxXQUFXLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDO0FBQzVCLENBQUM7QUFFRCxtQ0FBbUM7QUFDbkMsTUFBTSxVQUFVLFFBQVEsQ0FBQyxLQUFlO0lBQ3RDLFlBQVksR0FBRyxLQUFLLENBQUM7QUFDdkIsQ0FBQztBQUVEOzs7OztHQUtHO0FBQ0gsU0FBUyxZQUFZLENBQUMsS0FBcUIsRUFBRSxLQUFlLEVBQUUsR0FBVyxFQUFFLElBQWM7SUFDdkYsS0FBSyxNQUFNLE9BQU8sSUFBSSxXQUFXLEVBQUUsQ0FBQztRQUNsQyxPQUFPLENBQUMsS0FBSyxFQUFFLEtBQUssQ0FBQyxTQUFTLEVBQUUsR0FBRyxFQUFFLElBQUksQ0FBQyxDQUFDO0lBQzdDLENBQUM7SUFFRCxHQUFHLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsSUFBSSxVQUFVLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDO0lBQ2hELElBQUksS0FBSyxDQUFDLE9BQU8sSUFBSSxTQUFTLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxJQUFJLFNBQVMsQ0FBQyxPQUFPLENBQUMsWUFBWSxDQUFDLEVBQUUsQ0FBQztRQUNqRixJQUFJLGNBQWMsRUFBRSxDQUFDO1lBQ25CLE1BQU0sRUFBRSxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxFQUFFLEdBQUcsY0FBYyxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQzdELEtBQUssQ0FBQyxhQUFhLEVBQUUsRUFBRSxFQUFFLEtBQUssQ0FBQyxXQUFXLEVBQUUsRUFBRSxHQUFHLENBQUMsQ0FBQztRQUNyRCxDQUFDO2FBQU0sQ0FBQztZQUNOLEtBQUssQ0FBQyxTQUFTLEVBQUUsS0FBSyxDQUFDLFdBQVcsRUFBRSxFQUFFLEdBQUcsQ0FBQyxDQUFDO1FBQzdDLENBQUM7SUFDSCxDQUFDO0FBQ0gsQ0FBQztBQUVEOzs7OztHQUtHO0FBQ0gsU0FBUyxNQUFNLENBQUMsR0FBVyxFQUFFLEdBQXFCO0lBQ2hELE9BQU8sR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsS0FBSyxPQUFPLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDO0FBQy9DLENBQUM7QUFFRDs7O0dBR0c7QUFDSCxNQUFNLFVBQVUsVUFBVSxDQUFDLElBQWM7SUFDdkMsT0FBTyxNQUFNLENBQUMsT0FBTyxDQUFDLElBQUksSUFBSSxFQUFFLENBQUM7U0FDOUIsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsS0FBSyxDQUFDLEVBQUUsRUFBRSxDQUFDLEdBQUcsR0FBRyxJQUFJLE9BQU8sS0FBSyxLQUFLLFFBQVEsSUFBSSxVQUFVLElBQUksS0FBSyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsUUFBUSxFQUFFLENBQUMsQ0FBQyxDQUFDLEtBQUssRUFBRSxDQUFDO1NBQzlHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUNmLENBQUMifQ==
|
package/src/log/logger.ts
DELETED
|
@@ -1,179 +0,0 @@
|
|
|
1
|
-
import debug from 'debug';
|
|
2
|
-
import { inspect } from 'util';
|
|
3
|
-
|
|
4
|
-
import { type LogData, type LogFn } from './log_fn.js';
|
|
5
|
-
|
|
6
|
-
const LogLevels = ['silent', 'error', 'warn', 'info', 'verbose', 'debug'] as const;
|
|
7
|
-
|
|
8
|
-
/**
|
|
9
|
-
* A valid log severity level.
|
|
10
|
-
*/
|
|
11
|
-
export type LogLevel = (typeof LogLevels)[number];
|
|
12
|
-
|
|
13
|
-
function getLogLevel() {
|
|
14
|
-
const envLogLevel = process.env.LOG_LEVEL?.toLowerCase() as LogLevel;
|
|
15
|
-
let defaultLogLevel: LogLevel = 'info';
|
|
16
|
-
if (process.env.DEBUG) {
|
|
17
|
-
// if we set DEBUG to a non-empty string, use debug as default
|
|
18
|
-
defaultLogLevel = 'debug';
|
|
19
|
-
} else if (process.env.NODE_ENV === 'test') {
|
|
20
|
-
// otherwise, be silent in tests as these are frequently ran en-masse
|
|
21
|
-
defaultLogLevel = 'silent';
|
|
22
|
-
}
|
|
23
|
-
return LogLevels.includes(envLogLevel) ? envLogLevel : defaultLogLevel;
|
|
24
|
-
}
|
|
25
|
-
|
|
26
|
-
export let currentLevel = getLogLevel();
|
|
27
|
-
|
|
28
|
-
const logElapsedTime = ['1', 'true'].includes(process.env.LOG_ELAPSED_TIME ?? '');
|
|
29
|
-
const firstTimestamp: number = Date.now();
|
|
30
|
-
|
|
31
|
-
function filterNegativePatterns(debugString: string): string {
|
|
32
|
-
return debugString
|
|
33
|
-
.split(',')
|
|
34
|
-
.filter(p => !p.startsWith('-'))
|
|
35
|
-
.join(',');
|
|
36
|
-
}
|
|
37
|
-
function extractNegativePatterns(debugString: string): string[] {
|
|
38
|
-
return (
|
|
39
|
-
debugString
|
|
40
|
-
.split(',')
|
|
41
|
-
.filter(p => p.startsWith('-'))
|
|
42
|
-
// Remove the leading '-' from the pattern
|
|
43
|
-
.map(p => p.slice(1))
|
|
44
|
-
);
|
|
45
|
-
}
|
|
46
|
-
|
|
47
|
-
const namespaces = process.env.DEBUG ?? 'aztec:*';
|
|
48
|
-
debug.enable(filterNegativePatterns(namespaces));
|
|
49
|
-
|
|
50
|
-
/** Log function that accepts an exception object */
|
|
51
|
-
type ErrorLogFn = (msg: string, err?: Error | unknown, data?: LogData) => void;
|
|
52
|
-
|
|
53
|
-
/**
|
|
54
|
-
* Logger that supports multiple severity levels.
|
|
55
|
-
*/
|
|
56
|
-
export type Logger = { [K in LogLevel]: LogFn } & { /** Error log function */ error: ErrorLogFn };
|
|
57
|
-
|
|
58
|
-
/**
|
|
59
|
-
* Logger that supports multiple severity levels and can be called directly to issue a debug statement.
|
|
60
|
-
* Intended as a drop-in replacement for the debug module.
|
|
61
|
-
*/
|
|
62
|
-
export type DebugLogger = Logger;
|
|
63
|
-
|
|
64
|
-
/**
|
|
65
|
-
* Creates a new DebugLogger for the current module, defaulting to the LOG_LEVEL env var.
|
|
66
|
-
* If DEBUG="[module]" env is set, will enable debug logging if the module matches.
|
|
67
|
-
* Uses npm debug for debug level and console.error for other levels.
|
|
68
|
-
* @param name - Name of the module.
|
|
69
|
-
* @param fixedLogData - Additional data to include in the log message.
|
|
70
|
-
* @usage createDebugLogger('aztec:validator');
|
|
71
|
-
* // will always add the validator address to the log labels
|
|
72
|
-
* @returns A debug logger.
|
|
73
|
-
*/
|
|
74
|
-
|
|
75
|
-
export function createDebugLogger(name: string): DebugLogger {
|
|
76
|
-
const debugLogger = debug(name);
|
|
77
|
-
|
|
78
|
-
const negativePatterns = extractNegativePatterns(namespaces);
|
|
79
|
-
const accepted = () => {
|
|
80
|
-
return !negativePatterns.some(pattern => name.match(pattern));
|
|
81
|
-
};
|
|
82
|
-
const log = (level: LogLevel, msg: string, data?: LogData) => {
|
|
83
|
-
if (accepted()) {
|
|
84
|
-
logWithDebug(debugLogger, level, msg, data);
|
|
85
|
-
}
|
|
86
|
-
};
|
|
87
|
-
const logger = {
|
|
88
|
-
silent: () => {},
|
|
89
|
-
error: (msg: string, err?: unknown, data?: LogData) => log('error', fmtErr(msg, err), data),
|
|
90
|
-
warn: (msg: string, data?: LogData) => log('warn', msg, data),
|
|
91
|
-
info: (msg: string, data?: LogData) => log('info', msg, data),
|
|
92
|
-
verbose: (msg: string, data?: LogData) => log('verbose', msg, data),
|
|
93
|
-
debug: (msg: string, data?: LogData) => log('debug', msg, data),
|
|
94
|
-
};
|
|
95
|
-
return Object.assign((msg: string, data?: LogData) => log('debug', msg, data), logger);
|
|
96
|
-
}
|
|
97
|
-
|
|
98
|
-
/**
|
|
99
|
-
* A function to create a logger that automatically includes fixed data in each log entry.
|
|
100
|
-
* @param debugLogger - The base DebugLogger instance to which we attach fixed log data.
|
|
101
|
-
* @param fixedLogData - The data to be included in every log entry.
|
|
102
|
-
* @returns A DebugLogger with log level methods (error, warn, info, verbose, debug) that
|
|
103
|
-
* automatically attach `fixedLogData` to every log message.
|
|
104
|
-
*/
|
|
105
|
-
export function attachedFixedDataToLogger(debugLogger: DebugLogger, fixedLogData: LogData): DebugLogger {
|
|
106
|
-
// Helper function to merge fixed data with additional data passed to log entries.
|
|
107
|
-
const attach = (data?: LogData) => ({ ...fixedLogData, ...data });
|
|
108
|
-
// Define the logger with all the necessary log level methods.
|
|
109
|
-
const logger = {
|
|
110
|
-
// Silent log level does nothing.
|
|
111
|
-
silent: () => {},
|
|
112
|
-
error: (msg: string, err?: unknown, data?: LogData) => debugLogger.error(fmtErr(msg, err), attach(data)),
|
|
113
|
-
warn: (msg: string, data?: LogData) => debugLogger.warn(msg, attach(data)),
|
|
114
|
-
info: (msg: string, data?: LogData) => debugLogger.info(msg, attach(data)),
|
|
115
|
-
verbose: (msg: string, data?: LogData) => debugLogger.verbose(msg, attach(data)),
|
|
116
|
-
debug: (msg: string, data?: LogData) => debugLogger.debug(msg, attach(data)),
|
|
117
|
-
};
|
|
118
|
-
return Object.assign((msg: string, data?: LogData) => debugLogger.debug(msg, attach(data)), logger);
|
|
119
|
-
}
|
|
120
|
-
|
|
121
|
-
/** A callback to capture all logs. */
|
|
122
|
-
export type LogHandler = (level: LogLevel, namespace: string, msg: string, data?: LogData) => void;
|
|
123
|
-
|
|
124
|
-
const logHandlers: LogHandler[] = [];
|
|
125
|
-
|
|
126
|
-
/**
|
|
127
|
-
* Registers a callback for all logs, whether they are emitted in the current log level or not.
|
|
128
|
-
* @param handler - Callback to be called on every log.
|
|
129
|
-
*/
|
|
130
|
-
export function onLog(handler: LogHandler) {
|
|
131
|
-
logHandlers.push(handler);
|
|
132
|
-
}
|
|
133
|
-
|
|
134
|
-
/** Overrides current log level. */
|
|
135
|
-
export function setLevel(level: LogLevel) {
|
|
136
|
-
currentLevel = level;
|
|
137
|
-
}
|
|
138
|
-
|
|
139
|
-
/**
|
|
140
|
-
* Logs args to npm debug if enabled or log level is debug, console.error otherwise.
|
|
141
|
-
* @param debug - Instance of npm debug.
|
|
142
|
-
* @param level - Intended log level.
|
|
143
|
-
* @param args - Args to log.
|
|
144
|
-
*/
|
|
145
|
-
function logWithDebug(debug: debug.Debugger, level: LogLevel, msg: string, data?: LogData) {
|
|
146
|
-
for (const handler of logHandlers) {
|
|
147
|
-
handler(level, debug.namespace, msg, data);
|
|
148
|
-
}
|
|
149
|
-
|
|
150
|
-
msg = data ? `${msg} ${fmtLogData(data)}` : msg;
|
|
151
|
-
if (debug.enabled && LogLevels.indexOf(level) <= LogLevels.indexOf(currentLevel)) {
|
|
152
|
-
if (logElapsedTime) {
|
|
153
|
-
const ts = ((Date.now() - firstTimestamp) / 1000).toFixed(3);
|
|
154
|
-
debug('%ss [%s] %s', ts, level.toUpperCase(), msg);
|
|
155
|
-
} else {
|
|
156
|
-
debug('[%s] %s', level.toUpperCase(), msg);
|
|
157
|
-
}
|
|
158
|
-
}
|
|
159
|
-
}
|
|
160
|
-
|
|
161
|
-
/**
|
|
162
|
-
* Concatenates a log message and an exception.
|
|
163
|
-
* @param msg - Log message
|
|
164
|
-
* @param err - Error to log
|
|
165
|
-
* @returns A string with both the log message and the error message.
|
|
166
|
-
*/
|
|
167
|
-
function fmtErr(msg: string, err?: Error | unknown): string {
|
|
168
|
-
return err ? `${msg}: ${inspect(err)}` : msg;
|
|
169
|
-
}
|
|
170
|
-
|
|
171
|
-
/**
|
|
172
|
-
* Formats structured log data as a string for console output.
|
|
173
|
-
* @param data - Optional log data.
|
|
174
|
-
*/
|
|
175
|
-
export function fmtLogData(data?: LogData): string {
|
|
176
|
-
return Object.entries(data ?? {})
|
|
177
|
-
.map(([key, value]) => `${key}=${typeof value === 'object' && 'toString' in value ? value.toString() : value}`)
|
|
178
|
-
.join(' ');
|
|
179
|
-
}
|