@wireio/shared 1.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/lib/guards/applyTypeGuardExtras.d.ts +3 -0
- package/lib/guards/applyTypeGuardExtras.d.ts.map +1 -0
- package/lib/guards/applyTypeGuardExtras.js +5 -0
- package/lib/guards/applyTypeGuardExtras.js.map +1 -0
- package/lib/guards/array.d.ts +2 -0
- package/lib/guards/array.d.ts.map +1 -0
- package/lib/guards/array.js +4 -0
- package/lib/guards/array.js.map +1 -0
- package/lib/guards/assert.d.ts +19 -0
- package/lib/guards/assert.d.ts.map +1 -0
- package/lib/guards/assert.js +50 -0
- package/lib/guards/assert.js.map +1 -0
- package/lib/guards/class.d.ts +27 -0
- package/lib/guards/class.d.ts.map +1 -0
- package/lib/guards/class.js +34 -0
- package/lib/guards/class.js.map +1 -0
- package/lib/guards/guard-tools.d.ts +20 -0
- package/lib/guards/guard-tools.d.ts.map +1 -0
- package/lib/guards/guard-tools.js +50 -0
- package/lib/guards/guard-tools.js.map +1 -0
- package/lib/guards/index.d.ts +8 -0
- package/lib/guards/index.d.ts.map +1 -0
- package/lib/guards/index.js +8 -0
- package/lib/guards/index.js.map +1 -0
- package/lib/guards/primitive.d.ts +26 -0
- package/lib/guards/primitive.d.ts.map +1 -0
- package/lib/guards/primitive.js +47 -0
- package/lib/guards/primitive.js.map +1 -0
- package/lib/guards/types.d.ts +10 -0
- package/lib/guards/types.d.ts.map +1 -0
- package/lib/guards/types.js +2 -0
- package/lib/guards/types.js.map +1 -0
- package/lib/helpers/Deferred.d.ts +31 -0
- package/lib/helpers/Deferred.d.ts.map +1 -0
- package/lib/helpers/Deferred.js +111 -0
- package/lib/helpers/Deferred.js.map +1 -0
- package/lib/helpers/index.d.ts +2 -0
- package/lib/helpers/index.d.ts.map +1 -0
- package/lib/helpers/index.js +2 -0
- package/lib/helpers/index.js.map +1 -0
- package/lib/index.d.ts +4 -0
- package/lib/index.d.ts.map +1 -0
- package/lib/index.js +4 -0
- package/lib/index.js.map +1 -0
- package/lib/logging/Appender.d.ts +5 -0
- package/lib/logging/Appender.d.ts.map +1 -0
- package/lib/logging/Appender.js +2 -0
- package/lib/logging/Appender.js.map +1 -0
- package/lib/logging/Formatter.d.ts +3 -0
- package/lib/logging/Formatter.d.ts.map +1 -0
- package/lib/logging/Formatter.js +2 -0
- package/lib/logging/Formatter.js.map +1 -0
- package/lib/logging/InternalLogger.d.ts +2 -0
- package/lib/logging/InternalLogger.d.ts.map +1 -0
- package/lib/logging/InternalLogger.js +6 -0
- package/lib/logging/InternalLogger.js.map +1 -0
- package/lib/logging/Level.d.ts +14 -0
- package/lib/logging/Level.d.ts.map +1 -0
- package/lib/logging/Level.js +13 -0
- package/lib/logging/Level.js.map +1 -0
- package/lib/logging/LogRecord.d.ts +16 -0
- package/lib/logging/LogRecord.d.ts.map +1 -0
- package/lib/logging/LogRecord.js +2 -0
- package/lib/logging/LogRecord.js.map +1 -0
- package/lib/logging/Logger.d.ts +77 -0
- package/lib/logging/Logger.d.ts.map +1 -0
- package/lib/logging/Logger.js +158 -0
- package/lib/logging/Logger.js.map +1 -0
- package/lib/logging/LoggingManager.d.ts +128 -0
- package/lib/logging/LoggingManager.d.ts.map +1 -0
- package/lib/logging/LoggingManager.js +236 -0
- package/lib/logging/LoggingManager.js.map +1 -0
- package/lib/logging/appenders/ConsoleAppender.d.ts +55 -0
- package/lib/logging/appenders/ConsoleAppender.d.ts.map +1 -0
- package/lib/logging/appenders/ConsoleAppender.js +72 -0
- package/lib/logging/appenders/ConsoleAppender.js.map +1 -0
- package/lib/logging/appenders/DebugAppender.d.ts +53 -0
- package/lib/logging/appenders/DebugAppender.d.ts.map +1 -0
- package/lib/logging/appenders/DebugAppender.js +183 -0
- package/lib/logging/appenders/DebugAppender.js.map +1 -0
- package/lib/logging/appenders/FileAppender.d.ts +65 -0
- package/lib/logging/appenders/FileAppender.d.ts.map +1 -0
- package/lib/logging/appenders/FileAppender.js +212 -0
- package/lib/logging/appenders/FileAppender.js.map +1 -0
- package/lib/logging/appenders/aws-firehose/AWSFirehoseAppender.d.ts +27 -0
- package/lib/logging/appenders/aws-firehose/AWSFirehoseAppender.d.ts.map +1 -0
- package/lib/logging/appenders/aws-firehose/AWSFirehoseAppender.js +135 -0
- package/lib/logging/appenders/aws-firehose/AWSFirehoseAppender.js.map +1 -0
- package/lib/logging/appenders/aws-firehose/AWSFirehoseCredentialManager.d.ts +27 -0
- package/lib/logging/appenders/aws-firehose/AWSFirehoseCredentialManager.d.ts.map +1 -0
- package/lib/logging/appenders/aws-firehose/AWSFirehoseCredentialManager.js +94 -0
- package/lib/logging/appenders/aws-firehose/AWSFirehoseCredentialManager.js.map +1 -0
- package/lib/logging/appenders/index.d.ts +4 -0
- package/lib/logging/appenders/index.d.ts.map +1 -0
- package/lib/logging/appenders/index.js +4 -0
- package/lib/logging/appenders/index.js.map +1 -0
- package/lib/logging/context/LogContext.d.ts +48 -0
- package/lib/logging/context/LogContext.d.ts.map +1 -0
- package/lib/logging/context/LogContext.js +58 -0
- package/lib/logging/context/LogContext.js.map +1 -0
- package/lib/logging/context/LogContextContainer.d.ts +9 -0
- package/lib/logging/context/LogContextContainer.d.ts.map +1 -0
- package/lib/logging/context/LogContextContainer.js +25 -0
- package/lib/logging/context/LogContextContainer.js.map +1 -0
- package/lib/logging/context/LogContextProvider.d.ts +24 -0
- package/lib/logging/context/LogContextProvider.d.ts.map +1 -0
- package/lib/logging/context/LogContextProvider.js +18 -0
- package/lib/logging/context/LogContextProvider.js.map +1 -0
- package/lib/logging/context/index.d.ts +4 -0
- package/lib/logging/context/index.d.ts.map +1 -0
- package/lib/logging/context/index.js +4 -0
- package/lib/logging/context/index.js.map +1 -0
- package/lib/logging/context/providers/node/NodeContextProvider.d.ts +2 -0
- package/lib/logging/context/providers/node/NodeContextProvider.d.ts.map +1 -0
- package/lib/logging/context/providers/node/NodeContextProvider.js +31 -0
- package/lib/logging/context/providers/node/NodeContextProvider.js.map +1 -0
- package/lib/logging/context/providers/node/index.d.ts +3 -0
- package/lib/logging/context/providers/node/index.d.ts.map +1 -0
- package/lib/logging/context/providers/node/index.js +2 -0
- package/lib/logging/context/providers/node/index.js.map +1 -0
- package/lib/logging/examples/example-debug-appender.d.ts +2 -0
- package/lib/logging/examples/example-debug-appender.d.ts.map +1 -0
- package/lib/logging/examples/example-debug-appender.js +14 -0
- package/lib/logging/examples/example-debug-appender.js.map +1 -0
- package/lib/logging/examples/example-file-appender.d.ts +2 -0
- package/lib/logging/examples/example-file-appender.d.ts.map +1 -0
- package/lib/logging/examples/example-file-appender.js +16 -0
- package/lib/logging/examples/example-file-appender.js.map +1 -0
- package/lib/logging/getLogger.d.ts +3 -0
- package/lib/logging/getLogger.d.ts.map +1 -0
- package/lib/logging/getLogger.js +5 -0
- package/lib/logging/getLogger.js.map +1 -0
- package/lib/logging/index-node.d.ts +3 -0
- package/lib/logging/index-node.d.ts.map +1 -0
- package/lib/logging/index-node.js +3 -0
- package/lib/logging/index-node.js.map +1 -0
- package/lib/logging/index.d.ts +11 -0
- package/lib/logging/index.d.ts.map +1 -0
- package/lib/logging/index.js +11 -0
- package/lib/logging/index.js.map +1 -0
- package/lib/logging/util.d.ts +3 -0
- package/lib/logging/util.d.ts.map +1 -0
- package/lib/logging/util.js +6 -0
- package/lib/logging/util.js.map +1 -0
- package/package.json +31 -0
- package/src/guards/applyTypeGuardExtras.ts +9 -0
- package/src/guards/array.ts +5 -0
- package/src/guards/assert.ts +83 -0
- package/src/guards/class.ts +56 -0
- package/src/guards/guard-tools.ts +78 -0
- package/src/guards/index.ts +7 -0
- package/src/guards/primitive.ts +77 -0
- package/src/guards/types.ts +15 -0
- package/src/helpers/Deferred.ts +149 -0
- package/src/helpers/index.ts +1 -0
- package/src/index.ts +3 -0
- package/src/logging/Appender.ts +5 -0
- package/src/logging/Formatter.ts +8 -0
- package/src/logging/InternalLogger.ts +6 -0
- package/src/logging/Level.ts +19 -0
- package/src/logging/LogRecord.ts +17 -0
- package/src/logging/Logger.ts +222 -0
- package/src/logging/LoggingManager.ts +306 -0
- package/src/logging/appenders/ConsoleAppender.ts +110 -0
- package/src/logging/appenders/DebugAppender.ts +254 -0
- package/src/logging/appenders/FileAppender.ts +281 -0
- package/src/logging/appenders/aws-firehose/AWSFirehoseAppender.ts +176 -0
- package/src/logging/appenders/aws-firehose/AWSFirehoseCredentialManager.ts +132 -0
- package/src/logging/appenders/index.ts +3 -0
- package/src/logging/context/LogContext.ts +74 -0
- package/src/logging/context/LogContextContainer.ts +28 -0
- package/src/logging/context/LogContextProvider.ts +43 -0
- package/src/logging/context/index.ts +3 -0
- package/src/logging/context/providers/node/NodeContextProvider.ts +45 -0
- package/src/logging/context/providers/node/index.ts +3 -0
- package/src/logging/examples/example-debug-appender.ts +19 -0
- package/src/logging/examples/example-file-appender.ts +19 -0
- package/src/logging/getLogger.ts +9 -0
- package/src/logging/index-node.ts +2 -0
- package/src/logging/index.ts +11 -0
- package/src/logging/util.ts +6 -0
- package/tsconfig.json +9 -0
- package/tsconfig.tsbuildinfo +1 -0
|
@@ -0,0 +1,236 @@
|
|
|
1
|
+
import { isNumber, isObject, isString } from "../guards/index.js";
|
|
2
|
+
import { Option } from "prelude-ts";
|
|
3
|
+
import { flatten, isEmpty, min, negate } from "lodash";
|
|
4
|
+
import { ConsoleAppender } from "./appenders/ConsoleAppender.js";
|
|
5
|
+
import { Level, LevelThresholds } from "./Level.js";
|
|
6
|
+
import { Logger } from "./Logger.js";
|
|
7
|
+
import { LogContextContainer } from "./context/index.js";
|
|
8
|
+
import { flow, get, nth } from "lodash/fp.js";
|
|
9
|
+
function parseThresholdOverridePatterns(value, level = "debug") {
|
|
10
|
+
return value
|
|
11
|
+
.split(",")
|
|
12
|
+
.map((s) => [new RegExp(s), level]);
|
|
13
|
+
}
|
|
14
|
+
export const kEnvThresholdOverrides = Option.ofNullable(typeof process !== "undefined" && process.env.DEBUG_PATTERNS)
|
|
15
|
+
.filter(negate(isEmpty))
|
|
16
|
+
.map(parseThresholdOverridePatterns)
|
|
17
|
+
.getOrElse([]);
|
|
18
|
+
/**
|
|
19
|
+
* Logging manager
|
|
20
|
+
*/
|
|
21
|
+
export class LoggingManager {
|
|
22
|
+
loggers = new Map();
|
|
23
|
+
state = {
|
|
24
|
+
appenders: [],
|
|
25
|
+
rootLevel: Level.info,
|
|
26
|
+
thresholdOverrides: kEnvThresholdOverrides
|
|
27
|
+
};
|
|
28
|
+
get rootLevel() {
|
|
29
|
+
return this.state.rootLevel;
|
|
30
|
+
}
|
|
31
|
+
set rootLevel(newRootLevel) {
|
|
32
|
+
this.state.rootLevel = newRootLevel;
|
|
33
|
+
}
|
|
34
|
+
get rootThreshold() {
|
|
35
|
+
return LevelThresholds[this.rootLevel];
|
|
36
|
+
}
|
|
37
|
+
/**
|
|
38
|
+
* Get the current handler
|
|
39
|
+
*
|
|
40
|
+
* @returns {Appender<Record>}
|
|
41
|
+
*/
|
|
42
|
+
get appenders() {
|
|
43
|
+
return Option.ofNullable(this.state.appenders)
|
|
44
|
+
.filter((appenders) => appenders.length > 0)
|
|
45
|
+
.getOrCall(() => {
|
|
46
|
+
this.state.appenders.push(new ConsoleAppender());
|
|
47
|
+
return this.state.appenders;
|
|
48
|
+
});
|
|
49
|
+
}
|
|
50
|
+
/**
|
|
51
|
+
* Global threshold overrides
|
|
52
|
+
*/
|
|
53
|
+
get thresholdOverrides() {
|
|
54
|
+
return this.state.thresholdOverrides;
|
|
55
|
+
}
|
|
56
|
+
/**
|
|
57
|
+
* Update the overrides
|
|
58
|
+
*
|
|
59
|
+
* @param newOverrides
|
|
60
|
+
*/
|
|
61
|
+
set thresholdOverrides(newOverrides) {
|
|
62
|
+
this.state.thresholdOverrides = newOverrides;
|
|
63
|
+
}
|
|
64
|
+
/**
|
|
65
|
+
* Set global appenders
|
|
66
|
+
*
|
|
67
|
+
* @param {Array<Appender<Record>>} newAppenders
|
|
68
|
+
*/
|
|
69
|
+
setAppenders(...newAppenders) {
|
|
70
|
+
// WE MUTATE DO TO THE LIKELIHOOD OF SOMEONE HOLDING A REF TO THE ARRAY,
|
|
71
|
+
// CONVERT TO OBSERVABLE AT SOME POINT
|
|
72
|
+
const persistentAppenders = this.state.appenders;
|
|
73
|
+
persistentAppenders.length = 0;
|
|
74
|
+
persistentAppenders.push(...flatten(newAppenders));
|
|
75
|
+
return this;
|
|
76
|
+
}
|
|
77
|
+
/**
|
|
78
|
+
* Add one or more appenders to existing appender set
|
|
79
|
+
*
|
|
80
|
+
* @param {Appender<Record> | Appender<Record>[]} newAppenders
|
|
81
|
+
* @returns {this<Record>}
|
|
82
|
+
*/
|
|
83
|
+
addAppenders(...newAppenders) {
|
|
84
|
+
this.state.appenders.push(...flatten(newAppenders));
|
|
85
|
+
return this;
|
|
86
|
+
}
|
|
87
|
+
/**
|
|
88
|
+
* Clear threshold overrides
|
|
89
|
+
*
|
|
90
|
+
* @returns {this<Record>}
|
|
91
|
+
*/
|
|
92
|
+
clearThresholdOverrides() {
|
|
93
|
+
this.state.thresholdOverrides.length = 0;
|
|
94
|
+
return this;
|
|
95
|
+
}
|
|
96
|
+
setThresholdOverrides(...overrides) {
|
|
97
|
+
this.state.thresholdOverrides.length = 0;
|
|
98
|
+
this.state.thresholdOverrides.push(...overrides);
|
|
99
|
+
return this;
|
|
100
|
+
}
|
|
101
|
+
addThresholdOverrides(...overrides) {
|
|
102
|
+
this.state.thresholdOverrides.push(...overrides);
|
|
103
|
+
return this;
|
|
104
|
+
}
|
|
105
|
+
/**
|
|
106
|
+
* Get applicable current contexts
|
|
107
|
+
*
|
|
108
|
+
* @param {string} category
|
|
109
|
+
* @returns {LogContext[]}
|
|
110
|
+
*/
|
|
111
|
+
getApplicableCurrentContexts(category) {
|
|
112
|
+
return LogContextContainer.currentContext().filter(({ pattern }) => !pattern || pattern.test(category));
|
|
113
|
+
}
|
|
114
|
+
/**
|
|
115
|
+
* Check for any matching threshold overrides
|
|
116
|
+
*
|
|
117
|
+
* @param category
|
|
118
|
+
*/
|
|
119
|
+
determineThresholdOverride(category) {
|
|
120
|
+
const contexts = this.getApplicableCurrentContexts(category),
|
|
121
|
+
// FIND CONFIGURED OVERRIDE LEVEL
|
|
122
|
+
overrideThreshold = Option.ofNullable(this.thresholdOverrides.find(([match]) => isString(match) ? match === category : match.test(category)))
|
|
123
|
+
.map(nth(1))
|
|
124
|
+
.map((level) => LevelThresholds[level])
|
|
125
|
+
.getOrNull(),
|
|
126
|
+
// FIND `LogContext` OVERRIDE LEVEL
|
|
127
|
+
contextThresholds = contexts
|
|
128
|
+
.filter(flow(get("thresholdLevel"), isString))
|
|
129
|
+
.map(({ thresholdLevel }) => LevelThresholds[thresholdLevel]),
|
|
130
|
+
// IF ANY OVERRIDES, GET THE MOST VERBOSE LEVEL
|
|
131
|
+
override = Option.ofNullable([...contextThresholds, overrideThreshold].filter(isNumber))
|
|
132
|
+
.filter(negate(isEmpty))
|
|
133
|
+
.map(min)
|
|
134
|
+
.getOrNull();
|
|
135
|
+
return override;
|
|
136
|
+
}
|
|
137
|
+
/**
|
|
138
|
+
* Set the root logging level
|
|
139
|
+
*
|
|
140
|
+
* @param {LevelKind} newLevel
|
|
141
|
+
* @returns {this<Record>}
|
|
142
|
+
*/
|
|
143
|
+
setRootLevel(newLevel) {
|
|
144
|
+
this.state.rootLevel = newLevel;
|
|
145
|
+
return this;
|
|
146
|
+
}
|
|
147
|
+
/**
|
|
148
|
+
* Fire a log event, eventually
|
|
149
|
+
* invert this by making `Logger` an
|
|
150
|
+
* `EventEmitter3` and having the `LoggingManager`
|
|
151
|
+
* subscribe to `record` event
|
|
152
|
+
*
|
|
153
|
+
* @param {LogRecord<Record>} record
|
|
154
|
+
* @internal
|
|
155
|
+
*/
|
|
156
|
+
fire(record) {
|
|
157
|
+
const { category } = record, contexts = this.getApplicableCurrentContexts(category), contextAppenders = contexts.flatMap(get("appenders")), appenders = [...this.appenders, ...contextAppenders];
|
|
158
|
+
appenders.forEach((appender) => appender.append(record));
|
|
159
|
+
}
|
|
160
|
+
/**
|
|
161
|
+
* Get a logger from cache, if the category
|
|
162
|
+
* does not have an existing logger, then create one.
|
|
163
|
+
*
|
|
164
|
+
* @param {string} categoryOrFilename
|
|
165
|
+
* @param {Partial<LoggerOptions>} inOptions
|
|
166
|
+
* @returns {Logger}
|
|
167
|
+
*/
|
|
168
|
+
getLogger(categoryOrFilename, inOptions = {}) {
|
|
169
|
+
const options = Logger.hydrateOptions(inOptions);
|
|
170
|
+
const category = Logger.interoplateCategory(categoryOrFilename, options);
|
|
171
|
+
return Option.ofNullable(category)
|
|
172
|
+
.map((category) => this.loggers.get(category))
|
|
173
|
+
.getOrCall(() => {
|
|
174
|
+
const logger = new Logger(this, category, options);
|
|
175
|
+
this.loggers.set(category, logger);
|
|
176
|
+
return logger;
|
|
177
|
+
});
|
|
178
|
+
}
|
|
179
|
+
/**
|
|
180
|
+
* Configure the logging manager,
|
|
181
|
+
* this function is additive, so simply calling
|
|
182
|
+
* `configure` with a single option `rootLevel`,
|
|
183
|
+
* will not affect other options like `appenders` *
|
|
184
|
+
*
|
|
185
|
+
* @param {LoggingManagerOptions<any>} options
|
|
186
|
+
* @returns {this<Record>}
|
|
187
|
+
*/
|
|
188
|
+
configure(options) {
|
|
189
|
+
if (Level[options?.rootLevel]) {
|
|
190
|
+
this.setRootLevel(options.rootLevel);
|
|
191
|
+
}
|
|
192
|
+
if (options?.appenders) {
|
|
193
|
+
this.setAppenders(options.appenders);
|
|
194
|
+
}
|
|
195
|
+
if (options?.thresholdOverrides) {
|
|
196
|
+
this.addThresholdOverrides(...options.thresholdOverrides);
|
|
197
|
+
}
|
|
198
|
+
return this;
|
|
199
|
+
}
|
|
200
|
+
constructor() {
|
|
201
|
+
this.configure({});
|
|
202
|
+
}
|
|
203
|
+
/**
|
|
204
|
+
* Singleton instance
|
|
205
|
+
*
|
|
206
|
+
* @type {LoggingManager}
|
|
207
|
+
* @private
|
|
208
|
+
*/
|
|
209
|
+
static manager;
|
|
210
|
+
/**
|
|
211
|
+
* Get logging manager and optionally provided
|
|
212
|
+
* configuration options
|
|
213
|
+
*
|
|
214
|
+
* @param {LoggingManagerOptions<Record>} options
|
|
215
|
+
* @returns {LoggingManager<Record>}
|
|
216
|
+
*/
|
|
217
|
+
static get(options = null) {
|
|
218
|
+
if (!this.manager) {
|
|
219
|
+
this.manager = new LoggingManager();
|
|
220
|
+
}
|
|
221
|
+
if (options) {
|
|
222
|
+
this.manager.configure(options);
|
|
223
|
+
}
|
|
224
|
+
return this.manager;
|
|
225
|
+
}
|
|
226
|
+
}
|
|
227
|
+
export function getLoggingManager() {
|
|
228
|
+
return LoggingManager.get();
|
|
229
|
+
}
|
|
230
|
+
if (Option.try_(() => process.env.NODE_ENV === "development").getOrElse(false)) {
|
|
231
|
+
[typeof window !== "undefined" && window, typeof global !== "undefined" && global].filter(isObject)
|
|
232
|
+
.map(target => Object.assign(target, {
|
|
233
|
+
loggingManager: getLoggingManager()
|
|
234
|
+
}));
|
|
235
|
+
}
|
|
236
|
+
//# sourceMappingURL=LoggingManager.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"LoggingManager.js","sourceRoot":"","sources":["../../src/logging/LoggingManager.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
import type { LogRecord } from "../LogRecord";
|
|
2
|
+
import type { Appender } from "../Appender";
|
|
3
|
+
import type { LevelKind } from "../Level";
|
|
4
|
+
import type { Formatter } from "../Formatter";
|
|
5
|
+
/**
|
|
6
|
+
* Get a cached console bound log function
|
|
7
|
+
*
|
|
8
|
+
* @param {LevelKind} level
|
|
9
|
+
* @returns {(...args: any[]) => any}
|
|
10
|
+
*/
|
|
11
|
+
export declare function getConsoleLogBinding(level: LevelKind): (...args: any[]) => any;
|
|
12
|
+
/**
|
|
13
|
+
* ConsoleAppender Configuration
|
|
14
|
+
*/
|
|
15
|
+
export interface ConsoleAppenderConfig<Record extends LogRecord = any> {
|
|
16
|
+
cacheEnabled: boolean;
|
|
17
|
+
prettyPrint: boolean;
|
|
18
|
+
formatter?: Formatter<string | Array<any>>;
|
|
19
|
+
}
|
|
20
|
+
/**
|
|
21
|
+
* Partial of config, used for shortening instead of Partial<...>
|
|
22
|
+
*/
|
|
23
|
+
export type ConsoleAppenderOptions<Record extends LogRecord> = Partial<ConsoleAppenderConfig<Record>>;
|
|
24
|
+
export declare const consoleFormatter: Formatter<Array<any>>;
|
|
25
|
+
/**
|
|
26
|
+
* Default console config
|
|
27
|
+
* @type {ConsoleAppenderConfig}
|
|
28
|
+
*/
|
|
29
|
+
export declare const kDefaultConsoleAppenderConfig: ConsoleAppenderConfig;
|
|
30
|
+
/**
|
|
31
|
+
* Console appender, the simple default appender used
|
|
32
|
+
* everywhere OOB
|
|
33
|
+
*/
|
|
34
|
+
export declare class ConsoleAppender<Record extends LogRecord> implements Appender<Record> {
|
|
35
|
+
readonly config: ConsoleAppenderConfig;
|
|
36
|
+
/**
|
|
37
|
+
* Handle log records, transform, push to ES
|
|
38
|
+
*
|
|
39
|
+
* @param record
|
|
40
|
+
*/
|
|
41
|
+
append(record: Record): void;
|
|
42
|
+
/**
|
|
43
|
+
* Write args to console
|
|
44
|
+
*
|
|
45
|
+
* @param level
|
|
46
|
+
* @param args
|
|
47
|
+
*/
|
|
48
|
+
protected write(level: LevelKind, ...args: any[]): void;
|
|
49
|
+
/**
|
|
50
|
+
*
|
|
51
|
+
* @param {Partial<ConsoleAppenderOptions<Record>>} options
|
|
52
|
+
*/
|
|
53
|
+
constructor(options?: Partial<ConsoleAppenderOptions<Record>>);
|
|
54
|
+
}
|
|
55
|
+
//# sourceMappingURL=ConsoleAppender.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ConsoleAppender.d.ts","sourceRoot":"","sources":["../../../src/logging/appenders/ConsoleAppender.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,cAAc,CAAA;AAC7C,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAA;AAE3C,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,UAAU,CAAA;AACzC,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,cAAc,CAAA;AAQ7C;;;;;GAKG;AACH,wBAAgB,oBAAoB,CAAC,KAAK,EAAE,SAAS,aAZG,GAAG,EAAE,KAAK,GAAG,CAkBpE;AAED;;GAEG;AACH,MAAM,WAAW,qBAAqB,CAAC,MAAM,SAAS,SAAS,GAAG,GAAG;IACnE,YAAY,EAAE,OAAO,CAAA;IACrB,WAAW,EAAE,OAAO,CAAA;IACpB,SAAS,CAAC,EAAE,SAAS,CAAC,MAAM,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC,CAAA;CAC3C;AAED;;GAEG;AACH,MAAM,MAAM,sBAAsB,CAAC,MAAM,SAAS,SAAS,IAAI,OAAO,CACpE,qBAAqB,CAAC,MAAM,CAAC,CAC9B,CAAA;AAED,eAAO,MAAM,gBAAgB,EAAE,SAAS,CAAC,KAAK,CAAC,GAAG,CAAC,CAUlD,CAAA;AAED;;;GAGG;AACH,eAAO,MAAM,6BAA6B,EAAE,qBAI3C,CAAA;AAED;;;GAGG;AACH,qBAAa,eAAe,CAAC,MAAM,SAAS,SAAS,CACnD,YAAW,QAAQ,CAAC,MAAM,CAAC;IAE3B,QAAQ,CAAC,MAAM,EAAE,qBAAqB,CAAA;IAEtC;;;;OAIG;IACH,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI;IAS5B;;;;;OAKG;IACH,SAAS,CAAC,KAAK,CAAC,KAAK,EAAE,SAAS,EAAE,GAAG,IAAI,EAAE,GAAG,EAAE;IAMhD;;;OAGG;gBACS,OAAO,GAAE,OAAO,CAAC,sBAAsB,CAAC,MAAM,CAAC,CAAM;CAMlE"}
|
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
import { Option } from "prelude-ts";
|
|
2
|
+
const consoleLogBindings = new Map();
|
|
3
|
+
function getBoundConsoleFn(level) {
|
|
4
|
+
return (console[level] ?? console.log).bind(console);
|
|
5
|
+
}
|
|
6
|
+
/**
|
|
7
|
+
* Get a cached console bound log function
|
|
8
|
+
*
|
|
9
|
+
* @param {LevelKind} level
|
|
10
|
+
* @returns {(...args: any[]) => any}
|
|
11
|
+
*/
|
|
12
|
+
export function getConsoleLogBinding(level) {
|
|
13
|
+
if (!consoleLogBindings.has(level)) {
|
|
14
|
+
consoleLogBindings.set(level, getBoundConsoleFn(level));
|
|
15
|
+
}
|
|
16
|
+
return consoleLogBindings.get(level);
|
|
17
|
+
}
|
|
18
|
+
export const consoleFormatter = ({ level, message, data, args, category, timestamp }) => [
|
|
19
|
+
`[${category}] (${level}) ${message}`,
|
|
20
|
+
...(Array.isArray(args) ? args : [args])
|
|
21
|
+
];
|
|
22
|
+
/**
|
|
23
|
+
* Default console config
|
|
24
|
+
* @type {ConsoleAppenderConfig}
|
|
25
|
+
*/
|
|
26
|
+
export const kDefaultConsoleAppenderConfig = {
|
|
27
|
+
cacheEnabled: true,
|
|
28
|
+
prettyPrint: true,
|
|
29
|
+
formatter: consoleFormatter
|
|
30
|
+
};
|
|
31
|
+
/**
|
|
32
|
+
* Console appender, the simple default appender used
|
|
33
|
+
* everywhere OOB
|
|
34
|
+
*/
|
|
35
|
+
export class ConsoleAppender {
|
|
36
|
+
config;
|
|
37
|
+
/**
|
|
38
|
+
* Handle log records, transform, push to ES
|
|
39
|
+
*
|
|
40
|
+
* @param record
|
|
41
|
+
*/
|
|
42
|
+
append(record) {
|
|
43
|
+
const { level, message, data, args, category, timestamp } = record;
|
|
44
|
+
const { formatter = consoleFormatter } = this.config;
|
|
45
|
+
Option.ofNullable(formatter(record)).map((result) => {
|
|
46
|
+
const args = Array.isArray(result) ? result : [result];
|
|
47
|
+
this.write(level, ...args);
|
|
48
|
+
});
|
|
49
|
+
}
|
|
50
|
+
/**
|
|
51
|
+
* Write args to console
|
|
52
|
+
*
|
|
53
|
+
* @param level
|
|
54
|
+
* @param args
|
|
55
|
+
*/
|
|
56
|
+
write(level, ...args) {
|
|
57
|
+
Option.ofNullable(console[level])
|
|
58
|
+
.orCall(() => Option.ofNullable(console.log))
|
|
59
|
+
.map((fn) => fn.apply(console, args));
|
|
60
|
+
}
|
|
61
|
+
/**
|
|
62
|
+
*
|
|
63
|
+
* @param {Partial<ConsoleAppenderOptions<Record>>} options
|
|
64
|
+
*/
|
|
65
|
+
constructor(options = {}) {
|
|
66
|
+
this.config = {
|
|
67
|
+
...kDefaultConsoleAppenderConfig,
|
|
68
|
+
...options
|
|
69
|
+
};
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
//# sourceMappingURL=ConsoleAppender.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ConsoleAppender.js","sourceRoot":"","sources":["../../../src/logging/appenders/ConsoleAppender.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,MAAM,EAAE,MAAM,YAAY,CAAA;AAInC,MAAM,kBAAkB,GAAG,IAAI,GAAG,EAAsC,CAAA;AAExE,SAAS,iBAAiB,CAAC,KAAgB;IACzC,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,OAAO,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,CAAA;AACtD,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,oBAAoB,CAAC,KAAgB;IACnD,IAAI,CAAC,kBAAkB,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC;QACnC,kBAAkB,CAAC,GAAG,CAAC,KAAK,EAAE,iBAAiB,CAAC,KAAK,CAAC,CAAC,CAAA;IACzD,CAAC;IAED,OAAO,kBAAkB,CAAC,GAAG,CAAC,KAAK,CAAC,CAAA;AACtC,CAAC;AAkBD,MAAM,CAAC,MAAM,gBAAgB,GAA0B,CAAC,EACtD,KAAK,EACL,OAAO,EACP,IAAI,EACJ,IAAI,EACJ,QAAQ,EACR,SAAS,EACV,EAAE,EAAE,CAAC;IACJ,IAAI,QAAQ,OAAO,KAAK,MAAM,OAAO,EAAE;IACvC,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;CACzC,CAAA;AAED;;;GAGG;AACH,MAAM,CAAC,MAAM,6BAA6B,GAA0B;IAClE,YAAY,EAAE,IAAI;IAClB,WAAW,EAAE,IAAI;IACjB,SAAS,EAAE,gBAAgB;CAC5B,CAAA;AAED;;;GAGG;AACH,MAAM,OAAO,eAAe;IAGjB,MAAM,CAAuB;IAEtC;;;;OAIG;IACH,MAAM,CAAC,MAAc;QACnB,MAAM,EAAE,KAAK,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,QAAQ,EAAE,SAAS,EAAE,GAAG,MAAM,CAAA;QAClE,MAAM,EAAE,SAAS,GAAG,gBAAgB,EAAE,GAAG,IAAI,CAAC,MAAM,CAAA;QACpD,MAAM,CAAC,UAAU,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE;YAClD,MAAM,IAAI,GAAG,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAA;YACtD,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE,GAAG,IAAI,CAAC,CAAA;QAC5B,CAAC,CAAC,CAAA;IACJ,CAAC;IAED;;;;;OAKG;IACO,KAAK,CAAC,KAAgB,EAAE,GAAG,IAAW;QAC9C,MAAM,CAAC,UAAU,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;aAC5B,MAAM,CAAC,GAAG,EAAE,CAAC,MAAM,CAAC,UAAU,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;aAC5C,GAAG,CAAC,CAAC,EAAY,EAAE,EAAE,CAAC,EAAE,CAAC,KAAK,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC,CAAA;IACrD,CAAC;IAED;;;OAGG;IACH,YAAY,UAAmD,EAAE;QAC/D,IAAI,CAAC,MAAM,GAAG;YACZ,GAAG,6BAA6B;YAChC,GAAG,OAAO;SACX,CAAA;IACH,CAAC;CACF"}
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
import type { LogRecord } from "../LogRecord";
|
|
2
|
+
import type { Appender } from "../Appender";
|
|
3
|
+
import Debug from "debug";
|
|
4
|
+
import { ConsoleAppender, ConsoleAppenderConfig } from "./ConsoleAppender.js";
|
|
5
|
+
import type { Formatter } from "../Formatter";
|
|
6
|
+
/**
|
|
7
|
+
* DebugAppender Configuration
|
|
8
|
+
*/
|
|
9
|
+
export interface DebugAppenderConfig extends ConsoleAppenderConfig {
|
|
10
|
+
hideDate: boolean;
|
|
11
|
+
timeOnly: boolean;
|
|
12
|
+
useConsole: boolean;
|
|
13
|
+
useStdout: boolean;
|
|
14
|
+
categoryPrefix: string;
|
|
15
|
+
}
|
|
16
|
+
/**
|
|
17
|
+
* Partial of config, used for shortening instead of Partial<...>
|
|
18
|
+
*/
|
|
19
|
+
export type DebugAppenderOptions = Partial<DebugAppenderConfig>;
|
|
20
|
+
/**
|
|
21
|
+
* Context for using `debugFormatter`
|
|
22
|
+
*/
|
|
23
|
+
export type DebugFormatterContext = {
|
|
24
|
+
debugConfig: DebugAppenderConfig;
|
|
25
|
+
debug: Debug.Debugger;
|
|
26
|
+
};
|
|
27
|
+
/**
|
|
28
|
+
* Uses `debug` package for logging, very useful
|
|
29
|
+
*
|
|
30
|
+
* @param {LogRecord} record to format
|
|
31
|
+
* @param {DebugFormatterContext} context for this formatter
|
|
32
|
+
* @returns
|
|
33
|
+
*/
|
|
34
|
+
export declare const debugFormatter: Formatter<Array<any>, DebugFormatterContext>;
|
|
35
|
+
/**
|
|
36
|
+
* Debug appender, the simple default appender used
|
|
37
|
+
* everywhere OOB
|
|
38
|
+
*/
|
|
39
|
+
export declare class DebugAppender<Record extends LogRecord> extends ConsoleAppender<Record> implements Appender<Record> {
|
|
40
|
+
readonly debugConfig: DebugAppenderConfig;
|
|
41
|
+
/**
|
|
42
|
+
* Handle log records, transform, push to ES
|
|
43
|
+
*
|
|
44
|
+
* @param record
|
|
45
|
+
*/
|
|
46
|
+
append(record: Record): void;
|
|
47
|
+
/**
|
|
48
|
+
*
|
|
49
|
+
* @param {Partial<DebugAppenderOptions>} options
|
|
50
|
+
*/
|
|
51
|
+
constructor(options?: Partial<Omit<DebugAppenderOptions, "formatter">>);
|
|
52
|
+
}
|
|
53
|
+
//# sourceMappingURL=DebugAppender.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"DebugAppender.d.ts","sourceRoot":"","sources":["../../../src/logging/appenders/DebugAppender.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,cAAc,CAAA;AAC7C,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAA;AAE3C,OAAO,KAAK,MAAM,OAAO,CAAA;AACzB,OAAO,EACL,eAAe,EAAE,qBAAqB,EACvC,MAAM,sBAAsB,CAAA;AAC7B,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,cAAc,CAAA;AAiC7C;;GAEG;AACH,MAAM,WAAW,mBAAoB,SAAQ,qBAAqB;IAChE,QAAQ,EAAE,OAAO,CAAA;IACjB,QAAQ,EAAE,OAAO,CAAA;IACjB,UAAU,EAAE,OAAO,CAAA;IACnB,SAAS,EAAE,OAAO,CAAA;IAClB,cAAc,EAAE,MAAM,CAAA;CACvB;AAED;;GAEG;AACH,MAAM,MAAM,oBAAoB,GAAG,OAAO,CAAC,mBAAmB,CAAC,CAAA;AAsE/D;;GAEG;AACH,MAAM,MAAM,qBAAqB,GAAG;IAClC,WAAW,EAAE,mBAAmB,CAAA;IAChC,KAAK,EAAE,KAAK,CAAC,QAAQ,CAAA;CACtB,CAAA;AAED;;;;;;GAMG;AACH,eAAO,MAAM,cAAc,EAAE,SAAS,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,qBAAqB,CAqCvE,CAAA;AAmBD;;;GAGG;AACH,qBAAa,aAAa,CAAC,MAAM,SAAS,SAAS,CACjD,SAAQ,eAAe,CAAC,MAAM,CAC9B,YAAW,QAAQ,CAAC,MAAM,CAAC;IAE3B,QAAQ,CAAC,WAAW,EAAE,mBAAmB,CAAA;IAGzC;;;;OAIG;IACH,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI;IA6B5B;;;OAGG;gBACS,OAAO,GAAE,OAAO,CAAC,IAAI,CAAC,oBAAoB,EAAE,WAAW,CAAC,CAAM;CAS3E"}
|
|
@@ -0,0 +1,183 @@
|
|
|
1
|
+
import Debug from "debug";
|
|
2
|
+
import { ConsoleAppender, kDefaultConsoleAppenderConfig } from "./ConsoleAppender.js";
|
|
3
|
+
import { isEmpty, negate } from "lodash";
|
|
4
|
+
// let chalk: any = null
|
|
5
|
+
// if (
|
|
6
|
+
// typeof process !== "undefined" &&
|
|
7
|
+
// (process as any).type !== "renderer" &&
|
|
8
|
+
// (process as any).browser !== true
|
|
9
|
+
// ) {
|
|
10
|
+
// chalk = require("chalk")
|
|
11
|
+
// }
|
|
12
|
+
const useColors = false;
|
|
13
|
+
const makeColorFn = (fn) => {
|
|
14
|
+
// if (!useColors) {
|
|
15
|
+
// return (s: string) => s
|
|
16
|
+
// }
|
|
17
|
+
//
|
|
18
|
+
// return (s: string) => fn(chalk, s)
|
|
19
|
+
return (s) => s;
|
|
20
|
+
};
|
|
21
|
+
const colorFns = {
|
|
22
|
+
debug: makeColorFn((c, s) => c.green(s)),
|
|
23
|
+
error: makeColorFn((c, s) => c.red(s)),
|
|
24
|
+
fatal: makeColorFn((c, s) => c.bgRed.black(s)),
|
|
25
|
+
info: makeColorFn((c, s) => c.blue(s)),
|
|
26
|
+
trace: makeColorFn((c, s) => c.gray(s)),
|
|
27
|
+
warn: makeColorFn((c, s) => c.yellow(s))
|
|
28
|
+
};
|
|
29
|
+
const debuggers = new Map();
|
|
30
|
+
//const debugAppPrefix = "app"
|
|
31
|
+
function getDebug({ categoryPrefix }, cat) {
|
|
32
|
+
let debug = debuggers.get(cat);
|
|
33
|
+
if (!debug) {
|
|
34
|
+
debug = Debug([categoryPrefix, cat].filter(negate(isEmpty)).join(":"));
|
|
35
|
+
debuggers.set(cat, debug);
|
|
36
|
+
}
|
|
37
|
+
return debug;
|
|
38
|
+
}
|
|
39
|
+
// const timeFormatter = new Intl.DateTimeFormat('en-US', {
|
|
40
|
+
// timeStyle: "short"
|
|
41
|
+
// })
|
|
42
|
+
/**
|
|
43
|
+
*
|
|
44
|
+
* Get ISO date if `hideDate !== true`
|
|
45
|
+
*
|
|
46
|
+
* @param {DebugFormatterContext}
|
|
47
|
+
* @returns
|
|
48
|
+
*/
|
|
49
|
+
function getDate({ debugConfig: config }) {
|
|
50
|
+
if (config.hideDate) {
|
|
51
|
+
return "";
|
|
52
|
+
}
|
|
53
|
+
const date = new Date();
|
|
54
|
+
return config.timeOnly
|
|
55
|
+
? date.toLocaleTimeString("default", {
|
|
56
|
+
hour12: false
|
|
57
|
+
})
|
|
58
|
+
: date.toISOString();
|
|
59
|
+
}
|
|
60
|
+
/**
|
|
61
|
+
*
|
|
62
|
+
* Formats args for output, directly based on Debug.formatArgs
|
|
63
|
+
*
|
|
64
|
+
* @param {DebugFormatterContext} context
|
|
65
|
+
* @param {any[]} args
|
|
66
|
+
*/
|
|
67
|
+
function formatArgs(context, record, args) {
|
|
68
|
+
const { debug } = context;
|
|
69
|
+
const { namespace: name } = debug;
|
|
70
|
+
const prefix = colorFns[record.level]([
|
|
71
|
+
getDate(context),
|
|
72
|
+
Debug.humanize(debug.diff),
|
|
73
|
+
`(` + record.level.toUpperCase() + `)`,
|
|
74
|
+
`[${name}]`
|
|
75
|
+
]
|
|
76
|
+
.filter(negate(isEmpty))
|
|
77
|
+
.join(" "));
|
|
78
|
+
const msg = [prefix, args[0]].filter(negate(isEmpty)).join(" ");
|
|
79
|
+
args[0] = msg;
|
|
80
|
+
}
|
|
81
|
+
/**
|
|
82
|
+
* Uses `debug` package for logging, very useful
|
|
83
|
+
*
|
|
84
|
+
* @param {LogRecord} record to format
|
|
85
|
+
* @param {DebugFormatterContext} context for this formatter
|
|
86
|
+
* @returns
|
|
87
|
+
*/
|
|
88
|
+
export const debugFormatter = (record, { debug, debugConfig: config }) => {
|
|
89
|
+
const { level, message, data, args: argsIn, category, timestamp } = record;
|
|
90
|
+
const args = [message, ...argsIn];
|
|
91
|
+
args[0] = Debug.coerce(args[0]);
|
|
92
|
+
if (typeof args[0] !== "string") {
|
|
93
|
+
// Anything else let's inspect with %O
|
|
94
|
+
args.unshift("%O");
|
|
95
|
+
}
|
|
96
|
+
// Apply any `formatters` transformations
|
|
97
|
+
let index = 0;
|
|
98
|
+
args[0] = args[0].replace(/%([a-zA-Z%])/g, (match, format) => {
|
|
99
|
+
// If we encounter an escaped % then don't increase the array index
|
|
100
|
+
if (match === "%%") {
|
|
101
|
+
return "%";
|
|
102
|
+
}
|
|
103
|
+
index++;
|
|
104
|
+
const formatter = Debug.formatters[format];
|
|
105
|
+
if (typeof formatter === "function") {
|
|
106
|
+
const val = args[index];
|
|
107
|
+
match = formatter.call(debug, val);
|
|
108
|
+
// Now we need to remove `args[index]` since it's inlined in the `format`
|
|
109
|
+
args.splice(index, 1);
|
|
110
|
+
index--;
|
|
111
|
+
}
|
|
112
|
+
return match;
|
|
113
|
+
});
|
|
114
|
+
// Apply env-specific formatting (colors, etc.)
|
|
115
|
+
formatArgs({ debug, debugConfig: config }, record, args);
|
|
116
|
+
return args;
|
|
117
|
+
};
|
|
118
|
+
// [
|
|
119
|
+
// `[${category}] (${level}) ${message}`,
|
|
120
|
+
// ...(Array.isArray(args) ? args : [args])
|
|
121
|
+
// ]
|
|
122
|
+
/**
|
|
123
|
+
* Default console config
|
|
124
|
+
* @type {DebugAppenderConfig}
|
|
125
|
+
*/
|
|
126
|
+
const defaultConfig = {
|
|
127
|
+
hideDate: false,
|
|
128
|
+
timeOnly: true,
|
|
129
|
+
useConsole: false,
|
|
130
|
+
useStdout: true,
|
|
131
|
+
categoryPrefix: null,
|
|
132
|
+
...kDefaultConsoleAppenderConfig,
|
|
133
|
+
formatter: debugFormatter
|
|
134
|
+
};
|
|
135
|
+
/**
|
|
136
|
+
* Debug appender, the simple default appender used
|
|
137
|
+
* everywhere OOB
|
|
138
|
+
*/
|
|
139
|
+
export class DebugAppender extends ConsoleAppender {
|
|
140
|
+
debugConfig;
|
|
141
|
+
/**
|
|
142
|
+
* Handle log records, transform, push to ES
|
|
143
|
+
*
|
|
144
|
+
* @param record
|
|
145
|
+
*/
|
|
146
|
+
append(record) {
|
|
147
|
+
const { level, message, args: argsIn, category } = record;
|
|
148
|
+
// if (!this.levels.includes(level)) {
|
|
149
|
+
// super.append(record)
|
|
150
|
+
// return
|
|
151
|
+
// }
|
|
152
|
+
const debug = getDebug(this.debugConfig, category);
|
|
153
|
+
let prevTime = debug.prevTime;
|
|
154
|
+
// Set `diff` timestamp
|
|
155
|
+
const curr = Number(new Date());
|
|
156
|
+
const ms = curr - (prevTime || curr);
|
|
157
|
+
debug.diff = ms;
|
|
158
|
+
debug.prev = prevTime;
|
|
159
|
+
debug.curr = curr;
|
|
160
|
+
debug.prevTime = curr;
|
|
161
|
+
const logFn = debug.log || Debug.log;
|
|
162
|
+
const args = debugFormatter(record, { debug, debugConfig: this.debugConfig });
|
|
163
|
+
if (this.debugConfig.useConsole) {
|
|
164
|
+
super.write(level, ...args);
|
|
165
|
+
}
|
|
166
|
+
if (this.debugConfig.useStdout) {
|
|
167
|
+
logFn.apply(debug, args);
|
|
168
|
+
}
|
|
169
|
+
}
|
|
170
|
+
/**
|
|
171
|
+
*
|
|
172
|
+
* @param {Partial<DebugAppenderOptions>} options
|
|
173
|
+
*/
|
|
174
|
+
constructor(options = {}) {
|
|
175
|
+
super({
|
|
176
|
+
...defaultConfig,
|
|
177
|
+
...options,
|
|
178
|
+
formatter: debugFormatter
|
|
179
|
+
});
|
|
180
|
+
this.debugConfig = this.config;
|
|
181
|
+
}
|
|
182
|
+
}
|
|
183
|
+
//# sourceMappingURL=DebugAppender.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"DebugAppender.js","sourceRoot":"","sources":["../../../src/logging/appenders/DebugAppender.ts"],"names":[],"mappings":"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"}
|