@spinajs/log 2.0.480 → 2.0.482
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/README.md +744 -0
- package/lib/cjs/archive/LogArchiveService.d.ts +75 -0
- package/lib/cjs/archive/LogArchiveService.d.ts.map +1 -0
- package/lib/cjs/archive/LogArchiveService.js +189 -0
- package/lib/cjs/archive/LogArchiveService.js.map +1 -0
- package/lib/cjs/archive/archive-strategy.d.ts +32 -0
- package/lib/cjs/archive/archive-strategy.d.ts.map +1 -0
- package/lib/cjs/archive/archive-strategy.js +43 -0
- package/lib/cjs/archive/archive-strategy.js.map +1 -0
- package/lib/cjs/archive/context.d.ts +50 -0
- package/lib/cjs/archive/context.d.ts.map +1 -0
- package/lib/cjs/archive/context.js +3 -0
- package/lib/cjs/archive/context.js.map +1 -0
- package/lib/cjs/archive/index.d.ts +10 -0
- package/lib/cjs/archive/index.d.ts.map +1 -0
- package/lib/cjs/archive/index.js +26 -0
- package/lib/cjs/archive/index.js.map +1 -0
- package/lib/cjs/archive/retention-strategy.d.ts +26 -0
- package/lib/cjs/archive/retention-strategy.d.ts.map +1 -0
- package/lib/cjs/archive/retention-strategy.js +42 -0
- package/lib/cjs/archive/retention-strategy.js.map +1 -0
- package/lib/cjs/archive/strategies/AgeLogRetentionStrategy.d.ts +10 -0
- package/lib/cjs/archive/strategies/AgeLogRetentionStrategy.d.ts.map +1 -0
- package/lib/cjs/archive/strategies/AgeLogRetentionStrategy.js +46 -0
- package/lib/cjs/archive/strategies/AgeLogRetentionStrategy.js.map +1 -0
- package/lib/cjs/archive/strategies/CountLogRetentionStrategy.d.ts +10 -0
- package/lib/cjs/archive/strategies/CountLogRetentionStrategy.d.ts.map +1 -0
- package/lib/cjs/archive/strategies/CountLogRetentionStrategy.js +42 -0
- package/lib/cjs/archive/strategies/CountLogRetentionStrategy.js.map +1 -0
- package/lib/cjs/archive/strategies/CronLogArchiveStrategy.d.ts +15 -0
- package/lib/cjs/archive/strategies/CronLogArchiveStrategy.d.ts.map +1 -0
- package/lib/cjs/archive/strategies/CronLogArchiveStrategy.js +52 -0
- package/lib/cjs/archive/strategies/CronLogArchiveStrategy.js.map +1 -0
- package/lib/cjs/archive/strategies/SizeLogArchiveStrategy.d.ts +18 -0
- package/lib/cjs/archive/strategies/SizeLogArchiveStrategy.d.ts.map +1 -0
- package/lib/cjs/archive/strategies/SizeLogArchiveStrategy.js +63 -0
- package/lib/cjs/archive/strategies/SizeLogArchiveStrategy.js.map +1 -0
- package/lib/cjs/archive/strategies/util.d.ts +28 -0
- package/lib/cjs/archive/strategies/util.d.ts.map +1 -0
- package/lib/cjs/archive/strategies/util.js +59 -0
- package/lib/cjs/archive/strategies/util.js.map +1 -0
- package/lib/cjs/bootstrap.d.ts.map +1 -1
- package/lib/cjs/bootstrap.js +24 -1
- package/lib/cjs/bootstrap.js.map +1 -1
- package/lib/cjs/callsite.d.ts +26 -0
- package/lib/cjs/callsite.d.ts.map +1 -0
- package/lib/cjs/callsite.js +60 -0
- package/lib/cjs/callsite.js.map +1 -0
- package/lib/cjs/config/log.d.ts +96 -0
- package/lib/cjs/config/log.d.ts.map +1 -0
- package/lib/cjs/config/log.js +75 -0
- package/lib/cjs/config/log.js.map +1 -0
- package/lib/cjs/context.browser.d.ts +46 -0
- package/lib/cjs/context.browser.d.ts.map +1 -0
- package/lib/cjs/context.browser.js +85 -0
- package/lib/cjs/context.browser.js.map +1 -0
- package/lib/cjs/context.d.ts +61 -0
- package/lib/cjs/context.d.ts.map +1 -0
- package/lib/cjs/context.js +92 -0
- package/lib/cjs/context.js.map +1 -0
- package/lib/cjs/filters/LevelFilter.d.ts +24 -0
- package/lib/cjs/filters/LevelFilter.d.ts.map +1 -0
- package/lib/cjs/filters/LevelFilter.js +39 -0
- package/lib/cjs/filters/LevelFilter.js.map +1 -0
- package/lib/cjs/filters/MatchFilter.d.ts +30 -0
- package/lib/cjs/filters/MatchFilter.d.ts.map +1 -0
- package/lib/cjs/filters/MatchFilter.js +65 -0
- package/lib/cjs/filters/MatchFilter.js.map +1 -0
- package/lib/cjs/filters/RateLimitFilter.d.ts +37 -0
- package/lib/cjs/filters/RateLimitFilter.d.ts.map +1 -0
- package/lib/cjs/filters/RateLimitFilter.js +70 -0
- package/lib/cjs/filters/RateLimitFilter.js.map +1 -0
- package/lib/cjs/filters/index.d.ts +4 -0
- package/lib/cjs/filters/index.d.ts.map +1 -0
- package/lib/cjs/filters/index.js +20 -0
- package/lib/cjs/filters/index.js.map +1 -0
- package/lib/cjs/index.browser.d.ts +14 -0
- package/lib/cjs/index.browser.d.ts.map +1 -0
- package/lib/cjs/index.browser.js +46 -0
- package/lib/cjs/index.browser.js.map +1 -0
- package/lib/cjs/index.d.ts +8 -0
- package/lib/cjs/index.d.ts.map +1 -1
- package/lib/cjs/index.js +8 -0
- package/lib/cjs/index.js.map +1 -1
- package/lib/cjs/log.d.ts +60 -1
- package/lib/cjs/log.d.ts.map +1 -1
- package/lib/cjs/log.js +294 -32
- package/lib/cjs/log.js.map +1 -1
- package/lib/cjs/perf/LogMetricSink.d.ts +28 -0
- package/lib/cjs/perf/LogMetricSink.d.ts.map +1 -0
- package/lib/cjs/perf/LogMetricSink.js +120 -0
- package/lib/cjs/perf/LogMetricSink.js.map +1 -0
- package/lib/cjs/perf/measure.d.ts +9 -0
- package/lib/cjs/perf/measure.d.ts.map +1 -0
- package/lib/cjs/perf/measure.js +21 -0
- package/lib/cjs/perf/measure.js.map +1 -0
- package/lib/cjs/perf.d.ts +9 -0
- package/lib/cjs/perf.d.ts.map +1 -0
- package/lib/cjs/perf.js +18 -0
- package/lib/cjs/perf.js.map +1 -0
- package/lib/cjs/schemas/log.configuration.d.ts +151 -18
- package/lib/cjs/schemas/log.configuration.d.ts.map +1 -1
- package/lib/cjs/schemas/log.configuration.js +154 -21
- package/lib/cjs/schemas/log.configuration.js.map +1 -1
- package/lib/cjs/targets/BrowserConsoleTarget.d.ts +48 -0
- package/lib/cjs/targets/BrowserConsoleTarget.d.ts.map +1 -0
- package/lib/cjs/targets/BrowserConsoleTarget.js +48 -0
- package/lib/cjs/targets/BrowserConsoleTarget.js.map +1 -0
- package/lib/cjs/targets/ColoredConsoleTarget.d.ts.map +1 -1
- package/lib/cjs/targets/ColoredConsoleTarget.js +21 -12
- package/lib/cjs/targets/ColoredConsoleTarget.js.map +1 -1
- package/lib/cjs/targets/FileTarget.d.ts +96 -20
- package/lib/cjs/targets/FileTarget.d.ts.map +1 -1
- package/lib/cjs/targets/FileTarget.js +188 -225
- package/lib/cjs/targets/FileTarget.js.map +1 -1
- package/lib/cjs/targets/JsonFileTarget.d.ts +19 -0
- package/lib/cjs/targets/JsonFileTarget.d.ts.map +1 -0
- package/lib/cjs/targets/JsonFileTarget.js +44 -0
- package/lib/cjs/targets/JsonFileTarget.js.map +1 -0
- package/lib/cjs/targets/JsonTarget.d.ts +27 -0
- package/lib/cjs/targets/JsonTarget.d.ts.map +1 -0
- package/lib/cjs/targets/JsonTarget.js +46 -0
- package/lib/cjs/targets/JsonTarget.js.map +1 -0
- package/lib/cjs/targets/MemoryTarget.d.ts +33 -0
- package/lib/cjs/targets/MemoryTarget.d.ts.map +1 -0
- package/lib/cjs/targets/MemoryTarget.js +63 -0
- package/lib/cjs/targets/MemoryTarget.js.map +1 -0
- package/lib/cjs/targets/index.d.ts +7 -0
- package/lib/cjs/targets/index.d.ts.map +1 -1
- package/lib/cjs/targets/index.js +7 -0
- package/lib/cjs/targets/index.js.map +1 -1
- package/lib/cjs/targets/wrappers/AutoFlushTarget.d.ts +37 -0
- package/lib/cjs/targets/wrappers/AutoFlushTarget.d.ts.map +1 -0
- package/lib/cjs/targets/wrappers/AutoFlushTarget.js +48 -0
- package/lib/cjs/targets/wrappers/AutoFlushTarget.js.map +1 -0
- package/lib/cjs/targets/wrappers/FallbackGroupTarget.d.ts +45 -0
- package/lib/cjs/targets/wrappers/FallbackGroupTarget.d.ts.map +1 -0
- package/lib/cjs/targets/wrappers/FallbackGroupTarget.js +94 -0
- package/lib/cjs/targets/wrappers/FallbackGroupTarget.js.map +1 -0
- package/lib/cjs/targets/wrappers/RetryingTarget.d.ts +44 -0
- package/lib/cjs/targets/wrappers/RetryingTarget.d.ts.map +1 -0
- package/lib/cjs/targets/wrappers/RetryingTarget.js +61 -0
- package/lib/cjs/targets/wrappers/RetryingTarget.js.map +1 -0
- package/lib/cjs/targets/wrappers/SplitGroupTarget.d.ts +30 -0
- package/lib/cjs/targets/wrappers/SplitGroupTarget.d.ts.map +1 -0
- package/lib/cjs/targets/wrappers/SplitGroupTarget.js +52 -0
- package/lib/cjs/targets/wrappers/SplitGroupTarget.js.map +1 -0
- package/lib/cjs/traceparent.d.ts +63 -0
- package/lib/cjs/traceparent.d.ts.map +1 -0
- package/lib/cjs/traceparent.js +107 -0
- package/lib/cjs/traceparent.js.map +1 -0
- package/lib/mjs/archive/LogArchiveService.d.ts +75 -0
- package/lib/mjs/archive/LogArchiveService.d.ts.map +1 -0
- package/lib/mjs/archive/LogArchiveService.js +186 -0
- package/lib/mjs/archive/LogArchiveService.js.map +1 -0
- package/lib/mjs/archive/archive-strategy.d.ts +32 -0
- package/lib/mjs/archive/archive-strategy.d.ts.map +1 -0
- package/lib/mjs/archive/archive-strategy.js +39 -0
- package/lib/mjs/archive/archive-strategy.js.map +1 -0
- package/lib/mjs/archive/context.d.ts +50 -0
- package/lib/mjs/archive/context.d.ts.map +1 -0
- package/lib/mjs/archive/context.js +2 -0
- package/lib/mjs/archive/context.js.map +1 -0
- package/lib/mjs/archive/index.d.ts +10 -0
- package/lib/mjs/archive/index.d.ts.map +1 -0
- package/lib/mjs/archive/index.js +10 -0
- package/lib/mjs/archive/index.js.map +1 -0
- package/lib/mjs/archive/retention-strategy.d.ts +26 -0
- package/lib/mjs/archive/retention-strategy.d.ts.map +1 -0
- package/lib/mjs/archive/retention-strategy.js +38 -0
- package/lib/mjs/archive/retention-strategy.js.map +1 -0
- package/lib/mjs/archive/strategies/AgeLogRetentionStrategy.d.ts +10 -0
- package/lib/mjs/archive/strategies/AgeLogRetentionStrategy.d.ts.map +1 -0
- package/lib/mjs/archive/strategies/AgeLogRetentionStrategy.js +43 -0
- package/lib/mjs/archive/strategies/AgeLogRetentionStrategy.js.map +1 -0
- package/lib/mjs/archive/strategies/CountLogRetentionStrategy.d.ts +10 -0
- package/lib/mjs/archive/strategies/CountLogRetentionStrategy.d.ts.map +1 -0
- package/lib/mjs/archive/strategies/CountLogRetentionStrategy.js +39 -0
- package/lib/mjs/archive/strategies/CountLogRetentionStrategy.js.map +1 -0
- package/lib/mjs/archive/strategies/CronLogArchiveStrategy.d.ts +15 -0
- package/lib/mjs/archive/strategies/CronLogArchiveStrategy.d.ts.map +1 -0
- package/lib/mjs/archive/strategies/CronLogArchiveStrategy.js +49 -0
- package/lib/mjs/archive/strategies/CronLogArchiveStrategy.js.map +1 -0
- package/lib/mjs/archive/strategies/SizeLogArchiveStrategy.d.ts +18 -0
- package/lib/mjs/archive/strategies/SizeLogArchiveStrategy.d.ts.map +1 -0
- package/lib/mjs/archive/strategies/SizeLogArchiveStrategy.js +60 -0
- package/lib/mjs/archive/strategies/SizeLogArchiveStrategy.js.map +1 -0
- package/lib/mjs/archive/strategies/util.d.ts +28 -0
- package/lib/mjs/archive/strategies/util.d.ts.map +1 -0
- package/lib/mjs/archive/strategies/util.js +54 -0
- package/lib/mjs/archive/strategies/util.js.map +1 -0
- package/lib/mjs/bootstrap.d.ts.map +1 -1
- package/lib/mjs/bootstrap.js +25 -2
- package/lib/mjs/bootstrap.js.map +1 -1
- package/lib/mjs/callsite.d.ts +26 -0
- package/lib/mjs/callsite.d.ts.map +1 -0
- package/lib/mjs/callsite.js +57 -0
- package/lib/mjs/callsite.js.map +1 -0
- package/lib/mjs/config/log.d.ts +96 -0
- package/lib/mjs/config/log.d.ts.map +1 -0
- package/lib/mjs/config/log.js +72 -0
- package/lib/mjs/config/log.js.map +1 -0
- package/lib/mjs/context.browser.d.ts +46 -0
- package/lib/mjs/context.browser.d.ts.map +1 -0
- package/lib/mjs/context.browser.js +81 -0
- package/lib/mjs/context.browser.js.map +1 -0
- package/lib/mjs/context.d.ts +61 -0
- package/lib/mjs/context.d.ts.map +1 -0
- package/lib/mjs/context.js +88 -0
- package/lib/mjs/context.js.map +1 -0
- package/lib/mjs/filters/LevelFilter.d.ts +24 -0
- package/lib/mjs/filters/LevelFilter.d.ts.map +1 -0
- package/lib/mjs/filters/LevelFilter.js +36 -0
- package/lib/mjs/filters/LevelFilter.js.map +1 -0
- package/lib/mjs/filters/MatchFilter.d.ts +30 -0
- package/lib/mjs/filters/MatchFilter.d.ts.map +1 -0
- package/lib/mjs/filters/MatchFilter.js +62 -0
- package/lib/mjs/filters/MatchFilter.js.map +1 -0
- package/lib/mjs/filters/RateLimitFilter.d.ts +37 -0
- package/lib/mjs/filters/RateLimitFilter.d.ts.map +1 -0
- package/lib/mjs/filters/RateLimitFilter.js +67 -0
- package/lib/mjs/filters/RateLimitFilter.js.map +1 -0
- package/lib/mjs/filters/index.d.ts +4 -0
- package/lib/mjs/filters/index.d.ts.map +1 -0
- package/lib/mjs/filters/index.js +4 -0
- package/lib/mjs/filters/index.js.map +1 -0
- package/lib/mjs/index.browser.d.ts +14 -0
- package/lib/mjs/index.browser.d.ts.map +1 -0
- package/lib/mjs/index.browser.js +30 -0
- package/lib/mjs/index.browser.js.map +1 -0
- package/lib/mjs/index.d.ts +8 -0
- package/lib/mjs/index.d.ts.map +1 -1
- package/lib/mjs/index.js +8 -0
- package/lib/mjs/index.js.map +1 -1
- package/lib/mjs/log.d.ts +60 -1
- package/lib/mjs/log.d.ts.map +1 -1
- package/lib/mjs/log.js +295 -33
- package/lib/mjs/log.js.map +1 -1
- package/lib/mjs/perf/LogMetricSink.d.ts +28 -0
- package/lib/mjs/perf/LogMetricSink.d.ts.map +1 -0
- package/lib/mjs/perf/LogMetricSink.js +117 -0
- package/lib/mjs/perf/LogMetricSink.js.map +1 -0
- package/lib/mjs/perf/measure.d.ts +9 -0
- package/lib/mjs/perf/measure.d.ts.map +1 -0
- package/lib/mjs/perf/measure.js +18 -0
- package/lib/mjs/perf/measure.js.map +1 -0
- package/lib/mjs/perf.d.ts +9 -0
- package/lib/mjs/perf.d.ts.map +1 -0
- package/lib/mjs/perf.js +15 -0
- package/lib/mjs/perf.js.map +1 -0
- package/lib/mjs/schemas/log.configuration.d.ts +151 -18
- package/lib/mjs/schemas/log.configuration.d.ts.map +1 -1
- package/lib/mjs/schemas/log.configuration.js +154 -21
- package/lib/mjs/schemas/log.configuration.js.map +1 -1
- package/lib/mjs/targets/BrowserConsoleTarget.d.ts +48 -0
- package/lib/mjs/targets/BrowserConsoleTarget.d.ts.map +1 -0
- package/lib/mjs/targets/BrowserConsoleTarget.js +45 -0
- package/lib/mjs/targets/BrowserConsoleTarget.js.map +1 -0
- package/lib/mjs/targets/ColoredConsoleTarget.d.ts.map +1 -1
- package/lib/mjs/targets/ColoredConsoleTarget.js +21 -9
- package/lib/mjs/targets/ColoredConsoleTarget.js.map +1 -1
- package/lib/mjs/targets/FileTarget.d.ts +96 -20
- package/lib/mjs/targets/FileTarget.d.ts.map +1 -1
- package/lib/mjs/targets/FileTarget.js +191 -192
- package/lib/mjs/targets/FileTarget.js.map +1 -1
- package/lib/mjs/targets/JsonFileTarget.d.ts +19 -0
- package/lib/mjs/targets/JsonFileTarget.d.ts.map +1 -0
- package/lib/mjs/targets/JsonFileTarget.js +41 -0
- package/lib/mjs/targets/JsonFileTarget.js.map +1 -0
- package/lib/mjs/targets/JsonTarget.d.ts +27 -0
- package/lib/mjs/targets/JsonTarget.d.ts.map +1 -0
- package/lib/mjs/targets/JsonTarget.js +43 -0
- package/lib/mjs/targets/JsonTarget.js.map +1 -0
- package/lib/mjs/targets/MemoryTarget.d.ts +33 -0
- package/lib/mjs/targets/MemoryTarget.d.ts.map +1 -0
- package/lib/mjs/targets/MemoryTarget.js +60 -0
- package/lib/mjs/targets/MemoryTarget.js.map +1 -0
- package/lib/mjs/targets/index.d.ts +7 -0
- package/lib/mjs/targets/index.d.ts.map +1 -1
- package/lib/mjs/targets/index.js +7 -0
- package/lib/mjs/targets/index.js.map +1 -1
- package/lib/mjs/targets/wrappers/AutoFlushTarget.d.ts +37 -0
- package/lib/mjs/targets/wrappers/AutoFlushTarget.d.ts.map +1 -0
- package/lib/mjs/targets/wrappers/AutoFlushTarget.js +45 -0
- package/lib/mjs/targets/wrappers/AutoFlushTarget.js.map +1 -0
- package/lib/mjs/targets/wrappers/FallbackGroupTarget.d.ts +45 -0
- package/lib/mjs/targets/wrappers/FallbackGroupTarget.d.ts.map +1 -0
- package/lib/mjs/targets/wrappers/FallbackGroupTarget.js +91 -0
- package/lib/mjs/targets/wrappers/FallbackGroupTarget.js.map +1 -0
- package/lib/mjs/targets/wrappers/RetryingTarget.d.ts +44 -0
- package/lib/mjs/targets/wrappers/RetryingTarget.d.ts.map +1 -0
- package/lib/mjs/targets/wrappers/RetryingTarget.js +58 -0
- package/lib/mjs/targets/wrappers/RetryingTarget.js.map +1 -0
- package/lib/mjs/targets/wrappers/SplitGroupTarget.d.ts +30 -0
- package/lib/mjs/targets/wrappers/SplitGroupTarget.d.ts.map +1 -0
- package/lib/mjs/targets/wrappers/SplitGroupTarget.js +49 -0
- package/lib/mjs/targets/wrappers/SplitGroupTarget.js.map +1 -0
- package/lib/mjs/traceparent.d.ts +63 -0
- package/lib/mjs/traceparent.d.ts.map +1 -0
- package/lib/mjs/traceparent.js +100 -0
- package/lib/mjs/traceparent.js.map +1 -0
- package/lib/tsconfig.cjs.tsbuildinfo +1 -1
- package/lib/tsconfig.mjs.tsbuildinfo +1 -1
- package/package.json +25 -15
package/lib/cjs/log.js
CHANGED
|
@@ -22,18 +22,45 @@ const log_common_1 = require("@spinajs/log-common");
|
|
|
22
22
|
const glob_to_regexp_1 = __importDefault(require("glob-to-regexp"));
|
|
23
23
|
const exceptions_1 = require("@spinajs/exceptions");
|
|
24
24
|
const internal_logger_1 = require("@spinajs/internal-logger");
|
|
25
|
+
const callsite_js_1 = require("./callsite.js");
|
|
25
26
|
const lodash_1 = __importDefault(require("lodash"));
|
|
27
|
+
// Module-level cache of compiled glob->RegExp so a rule pattern is compiled ONCE
|
|
28
|
+
// process-wide, not once per (logger x rule) evaluation.
|
|
29
|
+
const GLOB_CACHE = new Map();
|
|
30
|
+
function globFor(pattern) {
|
|
31
|
+
let re = GLOB_CACHE.get(pattern);
|
|
32
|
+
if (!re) {
|
|
33
|
+
// eslint-disable-next-line security/detect-non-literal-regexp
|
|
34
|
+
re = (0, glob_to_regexp_1.default)(pattern);
|
|
35
|
+
GLOB_CACHE.set(pattern, re);
|
|
36
|
+
}
|
|
37
|
+
return re;
|
|
38
|
+
}
|
|
26
39
|
function wrapWrite(level) {
|
|
27
40
|
return (err, message, ...args) => {
|
|
41
|
+
// Zero-cost gating: only parse a caller frame ( which constructs an Error )
|
|
42
|
+
// when some target's layout references ${callsite}. Otherwise `vars` is just
|
|
43
|
+
// this.Variables and no Error is ever built - mirroring NLog's StackTraceUsage.
|
|
44
|
+
const extra = this.CaptureCallsite ? { callsite: (0, callsite_js_1.captureCallsite)() } : undefined;
|
|
45
|
+
const vars = extra ? { ...this.Variables, ...extra } : this.Variables;
|
|
28
46
|
if (err instanceof Error) {
|
|
29
|
-
return this.write((0, log_common_1.createLogMessageObject)(err, message, level, this.Name,
|
|
47
|
+
return this.write((0, log_common_1.createLogMessageObject)(err, message, level, this.Name, vars, ...args));
|
|
48
|
+
}
|
|
49
|
+
else if (err !== null && typeof err === "object" && !Array.isArray(err)) {
|
|
50
|
+
// merging-object form: `err` is a bag of structured fields, `message` is the
|
|
51
|
+
// format string, the rest are printf args. Fields are spread into Variables
|
|
52
|
+
// ( so a nested `error` key still runs the serializer ).
|
|
53
|
+
const fields = err;
|
|
54
|
+
const fmt = typeof message === "string" ? message : "";
|
|
55
|
+
return this.write((0, log_common_1.createLogMessageObject)(null, fmt, level, this.Name, { ...vars, ...fields }, ...args));
|
|
30
56
|
}
|
|
31
57
|
else {
|
|
58
|
+
const sErr = err;
|
|
32
59
|
if (message) {
|
|
33
|
-
return this.write((0, log_common_1.createLogMessageObject)(
|
|
60
|
+
return this.write((0, log_common_1.createLogMessageObject)(sErr, null, level, this.Name, vars, ...[message, ...args]));
|
|
34
61
|
}
|
|
35
62
|
else {
|
|
36
|
-
return this.write((0, log_common_1.createLogMessageObject)(
|
|
63
|
+
return this.write((0, log_common_1.createLogMessageObject)(sErr, null, level, this.Name, vars, ...args));
|
|
37
64
|
}
|
|
38
65
|
}
|
|
39
66
|
};
|
|
@@ -46,6 +73,13 @@ let FrameworkLogger = class FrameworkLogger extends log_common_1.Log {
|
|
|
46
73
|
super();
|
|
47
74
|
this.Name = Name;
|
|
48
75
|
this.Parent = Parent;
|
|
76
|
+
// composable per-logger filter pipeline, resolved from logger.filters ( plus a
|
|
77
|
+
// prepended WhenRepeatedFilter for the legacy logger.whenRepeated option ).
|
|
78
|
+
// Applied IN ORDER in write(); a null from any filter drops the entry.
|
|
79
|
+
this.Filters = [];
|
|
80
|
+
// Set in resolve() when some target's layout references ${callsite}. Gates the
|
|
81
|
+
// caller-frame capture in wrapWrite so logging stays zero-cost otherwise.
|
|
82
|
+
this.CaptureCallsite = false;
|
|
49
83
|
this.Variables = variables ?? {};
|
|
50
84
|
}
|
|
51
85
|
resolve() {
|
|
@@ -53,89 +87,317 @@ let FrameworkLogger = class FrameworkLogger extends log_common_1.Log {
|
|
|
53
87
|
if (!config) {
|
|
54
88
|
throw new Error(`Configuration module is not avaible. Please resolve configuration module before any logging can occur`);
|
|
55
89
|
}
|
|
56
|
-
|
|
57
|
-
|
|
90
|
+
// read the logger config and default per-subkey - the `logger` key always
|
|
91
|
+
// exists now ( the package ships logger.file defaults ), so a whole-object
|
|
92
|
+
// fallback would never apply. targets / rules still fall back individually.
|
|
93
|
+
const configured = config.get("logger", {});
|
|
94
|
+
this.Options = {
|
|
95
|
+
...configured,
|
|
96
|
+
targets: configured.targets ?? [
|
|
58
97
|
{
|
|
59
98
|
name: "Console",
|
|
60
99
|
type: "ConsoleTarget",
|
|
61
100
|
},
|
|
62
101
|
],
|
|
63
|
-
rules: [{ name: "*", level: "trace", target: "Console" }],
|
|
64
|
-
}
|
|
102
|
+
rules: configured.rules ?? [{ name: "*", level: "trace", target: "Console" }],
|
|
103
|
+
};
|
|
65
104
|
// make unique targets
|
|
66
105
|
// some modules may add same logger so we have multiple console loggers etc.
|
|
67
106
|
this.Options.targets = lodash_1.default.uniqWith(this.Options.targets, (a, b) => {
|
|
68
107
|
return a.name === b.name && a.type === b.type;
|
|
69
108
|
});
|
|
109
|
+
// Composable filter pipeline. Each configured filter is resolved by its DI
|
|
110
|
+
// string name ( same mechanism as targets, see resolveLogTargets ) with its
|
|
111
|
+
// own config entry passed as options, and applied IN ORDER in write().
|
|
112
|
+
//
|
|
113
|
+
// BACKWARD COMPAT: the legacy `logger.whenRepeated` option is mapped to a
|
|
114
|
+
// WhenRepeatedFilter PREPENDED to the list so existing configs keep working.
|
|
115
|
+
const configuredFilters = this.Options.filters ?? [];
|
|
116
|
+
const filterSpecs = this.Options.whenRepeated ? [{ type: "WhenRepeatedFilter", ...this.Options.whenRepeated }, ...configuredFilters] : configuredFilters;
|
|
117
|
+
this.Filters = filterSpecs.map((f) => di_1.DI.resolve(f.type, [f]));
|
|
70
118
|
this.matchRulesToLogger();
|
|
71
119
|
this.resolveLogTargets();
|
|
120
|
+
// Gate ${callsite} capture: only turn it on when some resolved target's
|
|
121
|
+
// layout actually references it. When off, wrapWrite never builds an Error.
|
|
122
|
+
this.CaptureCallsite = this.Targets.some((t) => typeof t.instance?.Options?.layout === "string" && /\$\{callsite/.test(t.instance.Options.layout));
|
|
123
|
+
// MinLevel = the lowest level any matched rule ( ie. any target ) accepts.
|
|
124
|
+
// A call below this level would be dropped by every target, so the per-method
|
|
125
|
+
// isEnabled() guard can short-circuit on it without changing output.
|
|
126
|
+
this.MinLevel = this.Rules.length ? Math.min(...this.Rules.map((r) => log_common_1.StrToLogLevel[r.level])) : log_common_1.LogLevel.Trace;
|
|
127
|
+
// Load any browser-persisted runtime override ( no-op / undefined on Node ).
|
|
128
|
+
const persisted = (0, log_common_1.readPersistedLevel)(this.Name);
|
|
129
|
+
if (persisted !== undefined) {
|
|
130
|
+
this.LevelOverride = persisted;
|
|
131
|
+
}
|
|
72
132
|
super.resolve();
|
|
73
133
|
log_common_1.Log.Loggers.set(this.Name, this);
|
|
74
134
|
}
|
|
75
135
|
trace(err, message, ...args) {
|
|
136
|
+
if (!this.isEnabled(log_common_1.LogLevel.Trace))
|
|
137
|
+
return;
|
|
76
138
|
wrapWrite.apply(this, [log_common_1.LogLevel.Trace])(err, message, ...args);
|
|
77
139
|
}
|
|
78
140
|
debug(err, message, ...args) {
|
|
141
|
+
if (!this.isEnabled(log_common_1.LogLevel.Debug))
|
|
142
|
+
return;
|
|
79
143
|
wrapWrite.apply(this, [log_common_1.LogLevel.Debug])(err, message, ...args);
|
|
80
144
|
}
|
|
81
145
|
info(err, message, ...args) {
|
|
146
|
+
if (!this.isEnabled(log_common_1.LogLevel.Info))
|
|
147
|
+
return;
|
|
82
148
|
wrapWrite.apply(this, [log_common_1.LogLevel.Info])(err, message, ...args);
|
|
83
149
|
}
|
|
84
150
|
warn(err, message, ...args) {
|
|
151
|
+
if (!this.isEnabled(log_common_1.LogLevel.Warn))
|
|
152
|
+
return;
|
|
85
153
|
wrapWrite.apply(this, [log_common_1.LogLevel.Warn])(err, message, ...args);
|
|
86
154
|
}
|
|
87
155
|
error(err, message, ...args) {
|
|
156
|
+
if (!this.isEnabled(log_common_1.LogLevel.Error))
|
|
157
|
+
return;
|
|
88
158
|
wrapWrite.apply(this, [log_common_1.LogLevel.Error])(err, message, ...args);
|
|
89
159
|
}
|
|
90
160
|
fatal(err, message, ...args) {
|
|
161
|
+
if (!this.isEnabled(log_common_1.LogLevel.Fatal))
|
|
162
|
+
return;
|
|
91
163
|
wrapWrite.apply(this, [log_common_1.LogLevel.Fatal])(err, message, ...args);
|
|
92
164
|
}
|
|
93
165
|
security(err, message, ...args) {
|
|
166
|
+
if (!this.isEnabled(log_common_1.LogLevel.Security))
|
|
167
|
+
return;
|
|
94
168
|
wrapWrite.apply(this, [log_common_1.LogLevel.Security])(err, message, ...args);
|
|
95
169
|
}
|
|
96
170
|
success(err, message, ...args) {
|
|
171
|
+
if (!this.isEnabled(log_common_1.LogLevel.Success))
|
|
172
|
+
return;
|
|
97
173
|
wrapWrite.apply(this, [log_common_1.LogLevel.Success])(err, message, ...args);
|
|
98
174
|
}
|
|
99
175
|
write(entry) {
|
|
100
176
|
if (entry.Variables.logger === this.Name) {
|
|
101
|
-
|
|
177
|
+
// Composable filter pipeline - run the entry through each configured filter
|
|
178
|
+
// IN ORDER. A filter returns the ( possibly modified ) entry to keep, or
|
|
179
|
+
// null to DROP it, in which case dispatch is skipped entirely. Runs AFTER
|
|
180
|
+
// the near-zero-cost level gate in the log methods so disabled levels never
|
|
181
|
+
// even reach the filters.
|
|
182
|
+
let filtered = entry;
|
|
183
|
+
for (const f of this.Filters) {
|
|
184
|
+
filtered = f.apply(filtered);
|
|
185
|
+
if (!filtered) {
|
|
186
|
+
return Promise.resolve([]);
|
|
187
|
+
}
|
|
188
|
+
}
|
|
189
|
+
const kept = filtered;
|
|
190
|
+
return Promise.allSettled(
|
|
191
|
+
// WINDOW membership: dispatch to a target when the entry's level falls in
|
|
192
|
+
// ANY of the target's `ranges` ( a min-only rule yields [min, Security],
|
|
193
|
+
// so this is unchanged for existing configs ).
|
|
194
|
+
this.Targets.filter((t) => t.ranges.some((w) => kept.Level >= w.min && kept.Level <= w.max)).map((t) => {
|
|
195
|
+
// PER-TARGET filters run AFTER the logger-level pipeline, for this
|
|
196
|
+
// target ONLY. A filter may MUTATE the entry ( eg. WhenRepeated's (xN) ),
|
|
197
|
+
// so isolate a per-target clone BEFORE applying them - only when this
|
|
198
|
+
// target actually has filters - so mutation never bleeds into others.
|
|
199
|
+
let e = kept;
|
|
200
|
+
if (t.filters && t.filters.length) {
|
|
201
|
+
e = { Level: kept.Level, Variables: { ...kept.Variables } };
|
|
202
|
+
for (const tf of t.filters) {
|
|
203
|
+
e = tf.apply(e);
|
|
204
|
+
if (!e)
|
|
205
|
+
break;
|
|
206
|
+
}
|
|
207
|
+
}
|
|
208
|
+
// a target filter dropped it for THIS target only
|
|
209
|
+
if (!e)
|
|
210
|
+
return Promise.resolve();
|
|
102
211
|
if (!t.instance) {
|
|
103
212
|
throw new exceptions_1.InvalidOperation(`Target ${t.rule.target} for rule ${t.rule.name} not exists`);
|
|
104
213
|
}
|
|
105
|
-
return t.instance.write(
|
|
214
|
+
return t.instance.write(e);
|
|
106
215
|
}));
|
|
107
216
|
}
|
|
108
217
|
return Promise.resolve([]);
|
|
109
218
|
}
|
|
110
219
|
resolveLogTargets() {
|
|
111
|
-
|
|
220
|
+
// BUG 2 fix: multiple matched rules can route to the SAME target. The old
|
|
221
|
+
// code built one descriptor PER (rule, target) pair, so write() dispatched
|
|
222
|
+
// to that target once per rule - duplicating output. Collapse to ONE
|
|
223
|
+
// descriptor per target definition, keeping the MOST PERMISSIVE ( lowest )
|
|
224
|
+
// rule level so the target receives an entry if ANY routing rule allows that
|
|
225
|
+
// level, exactly once ( write() filters via kept.Level >= rule.level ). We
|
|
226
|
+
// key by the target-config object ( a stable reference in Options.targets )
|
|
227
|
+
// rather than the resolved instance so this is correct regardless of the
|
|
228
|
+
// target's DI lifetime ( a @NewInstance target would otherwise still yield
|
|
229
|
+
// one fresh instance per rule and never collapse ). Each unique target is
|
|
230
|
+
// therefore resolved exactly ONCE.
|
|
231
|
+
//
|
|
232
|
+
// WINDOWS: a rule now carries a level WINDOW `[level, maxLevel ?? Security]`
|
|
233
|
+
// and several rules can route to the SAME target with DIFFERENT windows, so
|
|
234
|
+
// one min-level is not enough. We collect ALL windows per target ( their
|
|
235
|
+
// UNION ) into `ranges`, and keep the representative `rule` as the one with
|
|
236
|
+
// the LOWEST min ( used for the "no target" error and back-compat ).
|
|
237
|
+
const byTarget = new Map();
|
|
238
|
+
for (const r of this.Rules) {
|
|
239
|
+
const wantedNames = Array.isArray(r.target) ? r.target : [r.target];
|
|
240
|
+
// Resolve the rule's target NAMES to definitions. Distinguish two cases:
|
|
241
|
+
// - a named target exists but is `enabled: false` -> intentionally not
|
|
242
|
+
// routed, skip it silently ( and do NOT instantiate it below ).
|
|
243
|
+
// - a name matches NO defined target at all -> misconfig ( BUG 3 ), throw.
|
|
244
|
+
// So `namedButMissing` = wanted names with no matching def AT ALL; disabled
|
|
245
|
+
// matches DO count as "the name exists" and are simply not collected.
|
|
246
|
+
const namedButMissing = wantedNames.filter((n) => !this.Options.targets.some((t) => t.name === n));
|
|
247
|
+
if (namedButMissing.length > 0) {
|
|
248
|
+
throw new exceptions_1.InvalidOption(`No target matching rule ${r.name} ( wanted target(s): ${namedButMissing.join(", ")} )`);
|
|
249
|
+
}
|
|
250
|
+
// EXCLUDE disabled targets before dedupe/resolve so they are never built.
|
|
112
251
|
const found = this.Options.targets.filter((t) => {
|
|
113
|
-
return
|
|
252
|
+
return wantedNames.includes(t.name) && t.enabled !== false;
|
|
114
253
|
});
|
|
115
|
-
|
|
116
|
-
|
|
254
|
+
const window = {
|
|
255
|
+
min: log_common_1.StrToLogLevel[r.level],
|
|
256
|
+
max: r.maxLevel ? log_common_1.StrToLogLevel[r.maxLevel] : log_common_1.LogLevel.Security,
|
|
257
|
+
};
|
|
258
|
+
for (const f of found) {
|
|
259
|
+
const existing = byTarget.get(f);
|
|
260
|
+
if (!existing) {
|
|
261
|
+
byTarget.set(f, { rule: r, ranges: [window] });
|
|
262
|
+
}
|
|
263
|
+
else {
|
|
264
|
+
existing.ranges.push(window);
|
|
265
|
+
// keep the representative rule as the one with the LOWEST min level
|
|
266
|
+
if (window.min < log_common_1.StrToLogLevel[existing.rule.level]) {
|
|
267
|
+
existing.rule = r;
|
|
268
|
+
}
|
|
269
|
+
}
|
|
117
270
|
}
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
271
|
+
}
|
|
272
|
+
this.Targets = [...byTarget.entries()].map(([f, r]) => this.buildTargetDesc(f, r.ranges, r.rule));
|
|
273
|
+
}
|
|
274
|
+
/**
|
|
275
|
+
* Build one {@link ILogTargetDesc } from a target definition, its level
|
|
276
|
+
* WINDOWS and a representative rule. Shared by config-time
|
|
277
|
+
* {@link resolveLogTargets } and the runtime {@link addTarget } so both
|
|
278
|
+
* resolve the target instance and its per-target filters the SAME way:
|
|
279
|
+
* the target class is resolved by its DI string `type`, and each per-target
|
|
280
|
+
* filter spec is resolved by its DI string `type` ( @NewInstance => per-use
|
|
281
|
+
* state ).
|
|
282
|
+
*/
|
|
283
|
+
buildTargetDesc(def, ranges, rule) {
|
|
284
|
+
return {
|
|
285
|
+
instance: di_1.DI.resolve(def.type, [def]),
|
|
286
|
+
options: def,
|
|
287
|
+
rule,
|
|
288
|
+
ranges,
|
|
289
|
+
filters: (def.filters ?? []).map((spec) => di_1.DI.resolve(spec.type, [spec])),
|
|
290
|
+
};
|
|
291
|
+
}
|
|
292
|
+
/**
|
|
293
|
+
* Recompute the two cheap gates that {@link write } / the per-method
|
|
294
|
+
* isEnabled() guard rely on, so they stay correct after the target set
|
|
295
|
+
* changes at runtime ( {@link addTarget } / {@link removeTarget } ):
|
|
296
|
+
* - MinLevel = lowest `min` across all attached targets' windows ( floor
|
|
297
|
+
* Trace when there are none ), so a call below it is short-circuited.
|
|
298
|
+
* - CaptureCallsite = true iff some attached target's layout references
|
|
299
|
+
* ${callsite}, gating the caller-frame capture in wrapWrite.
|
|
300
|
+
*/
|
|
301
|
+
recomputeGates() {
|
|
302
|
+
const mins = this.Targets.flatMap((t) => t.ranges.map((w) => w.min));
|
|
303
|
+
this.MinLevel = mins.length ? Math.min(...mins) : log_common_1.LogLevel.Trace;
|
|
304
|
+
this.CaptureCallsite = this.Targets.some((t) => typeof t.instance?.Options?.layout === "string" && /\$\{callsite/.test(t.instance.Options.layout));
|
|
305
|
+
}
|
|
306
|
+
/**
|
|
307
|
+
* Attach a sink to THIS logger AT RUNTIME, without touching config. Resolves
|
|
308
|
+
* the target ( and its per-target filters ) exactly as config-time routing
|
|
309
|
+
* does, then recomputes the MinLevel / ${callsite} gates so dispatch stays
|
|
310
|
+
* correct. Returns the resolved instance, or `undefined` when nothing was
|
|
311
|
+
* attached ( `def.enabled === false` ).
|
|
312
|
+
*
|
|
313
|
+
* A level WINDOW `[opts.level ?? "trace", opts.maxLevel ?? security]` is
|
|
314
|
+
* applied ( same semantics as a routing rule's window ). Adding a target
|
|
315
|
+
* whose name already exists REPLACES the existing descriptor(s) ( the old
|
|
316
|
+
* instance is flushed first ) so a name is never duplicated.
|
|
317
|
+
*
|
|
318
|
+
* `opts.filters` are APPENDED to any `def.filters` ( def first, opts last ).
|
|
319
|
+
*/
|
|
320
|
+
addTarget(def, opts) {
|
|
321
|
+
// Consistent with config-time skip: a disabled def is never instantiated.
|
|
322
|
+
if (def.enabled === false) {
|
|
323
|
+
return undefined;
|
|
324
|
+
}
|
|
325
|
+
const levelName = opts?.level ?? "trace";
|
|
326
|
+
if (!(levelName in log_common_1.StrToLogLevel)) {
|
|
327
|
+
throw new exceptions_1.InvalidOption(`addTarget: invalid level '${levelName}'`);
|
|
328
|
+
}
|
|
329
|
+
if (opts?.maxLevel !== undefined && !(opts.maxLevel in log_common_1.StrToLogLevel)) {
|
|
330
|
+
throw new exceptions_1.InvalidOption(`addTarget: invalid maxLevel '${opts.maxLevel}'`);
|
|
331
|
+
}
|
|
332
|
+
const window = {
|
|
333
|
+
min: log_common_1.StrToLogLevel[levelName],
|
|
334
|
+
max: opts?.maxLevel ? log_common_1.StrToLogLevel[opts.maxLevel] : log_common_1.LogLevel.Security,
|
|
335
|
+
};
|
|
336
|
+
// Merge opts.filters AFTER def.filters ( def first, opts appended ).
|
|
337
|
+
const mergedDef = opts?.filters && opts.filters.length ? { ...def, filters: [...(def.filters ?? []), ...opts.filters] } : def;
|
|
338
|
+
// REPLACE any existing same-named descriptor(s) - flush them first so no
|
|
339
|
+
// buffered entry is lost, then drop them ( do NOT dispose; the instance may
|
|
340
|
+
// be DI-owned / shared ).
|
|
341
|
+
const stale = this.Targets.filter((t) => t.options?.name === def.name);
|
|
342
|
+
for (const t of stale) {
|
|
343
|
+
void t.instance.forceFlush();
|
|
344
|
+
}
|
|
345
|
+
this.Targets = this.Targets.filter((t) => t.options?.name !== def.name);
|
|
346
|
+
// Synthesize a representative rule mirroring the window for back-compat /
|
|
347
|
+
// the "no target" error path.
|
|
348
|
+
const rule = { name: this.Name, level: levelName, maxLevel: opts?.maxLevel, target: def.name };
|
|
349
|
+
const desc = this.buildTargetDesc(mergedDef, [window], rule);
|
|
350
|
+
this.Targets.push(desc);
|
|
351
|
+
this.recomputeGates();
|
|
352
|
+
return desc.instance;
|
|
353
|
+
}
|
|
354
|
+
/**
|
|
355
|
+
* Detach a runtime sink by its target `name`. Each matching descriptor's
|
|
356
|
+
* instance is force-flushed ( to drain buffered entries ) BEFORE removal - it
|
|
357
|
+
* is NOT disposed, since the instance may be shared / DI-owned. Recomputes the
|
|
358
|
+
* gates afterwards. No-op when no target with that name is attached.
|
|
359
|
+
*/
|
|
360
|
+
async removeTarget(name) {
|
|
361
|
+
const matched = this.Targets.filter((t) => t.options?.name === name);
|
|
362
|
+
if (matched.length === 0) {
|
|
363
|
+
return;
|
|
364
|
+
}
|
|
365
|
+
await Promise.allSettled(matched.map((t) => t.instance.forceFlush()));
|
|
366
|
+
this.Targets = this.Targets.filter((t) => t.options?.name !== name);
|
|
367
|
+
this.recomputeGates();
|
|
126
368
|
}
|
|
127
369
|
matchRulesToLogger() {
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
//
|
|
134
|
-
const
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
370
|
+
// NLog-style ordered, ADDITIVE evaluation. Walk the rules IN CONFIG ORDER
|
|
371
|
+
// and collect EVERY rule whose glob matches this logger ( so a logger matched
|
|
372
|
+
// by both `*` and a specific rule routes to BOTH - de-duped by target in
|
|
373
|
+
// resolveLogTargets ). A matched rule with `final: true` STOPS evaluation of
|
|
374
|
+
// any LATER rules ( that final rule and all earlier matched rules still apply
|
|
375
|
+
// ) - place a specific `final` rule before `*` to get this-rule-only routing.
|
|
376
|
+
const matched = [];
|
|
377
|
+
for (const r of this.Options.rules) {
|
|
378
|
+
if (typeof r.name !== "string") {
|
|
379
|
+
throw new exceptions_1.InvalidOption(`Log rule name must be a string, got ${typeof r.name}`);
|
|
380
|
+
}
|
|
381
|
+
// Guard: an invalid level would leave StrToLogLevel[level] === undefined,
|
|
382
|
+
// poisoning MinLevel ( Math.min(..., NaN) === NaN ) and the write() dispatch
|
|
383
|
+
// gate, silently killing the logger. Schema validates config; this guards
|
|
384
|
+
// programmatic / default rule paths too.
|
|
385
|
+
if (!(r.level in log_common_1.StrToLogLevel)) {
|
|
386
|
+
throw new exceptions_1.InvalidOption(`Log rule ${r.name} has invalid level '${r.level}'`);
|
|
387
|
+
}
|
|
388
|
+
// Same guard for the optional upper bound: an invalid maxLevel would make
|
|
389
|
+
// StrToLogLevel[maxLevel] === undefined and poison the window test.
|
|
390
|
+
if (r.maxLevel !== undefined && !(r.maxLevel in log_common_1.StrToLogLevel)) {
|
|
391
|
+
throw new exceptions_1.InvalidOption(`Log rule ${r.name} has invalid maxLevel '${r.maxLevel}'`);
|
|
392
|
+
}
|
|
393
|
+
if (globFor(r.name).test(this.Name)) {
|
|
394
|
+
matched.push(r);
|
|
395
|
+
if (r.final) {
|
|
396
|
+
break;
|
|
397
|
+
}
|
|
398
|
+
}
|
|
399
|
+
}
|
|
400
|
+
this.Rules = matched;
|
|
139
401
|
}
|
|
140
402
|
};
|
|
141
403
|
exports.FrameworkLogger = FrameworkLogger;
|
package/lib/cjs/log.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"log.js","sourceRoot":"","sources":["../../src/log.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;AAAA,4DAA4D;AAC5D,sDAAsD;AACtD,0DAA0D;AAC1D,0DAAuD;AACvD,oCAA0D;AAC1D,oDAAoK;AACpK,oEAA0C;AAC1C,oDAAsE;AACtE,8DAA+D;AAC/D,oDAAuB;AAEvB,SAAS,SAAS,CAAY,KAAe;IAC3C,OAAO,CAAC,GAAmB,EAAE,OAAuB,EAAE,GAAG,IAAW,EAAE,EAAE;QACtE,IAAI,GAAG,YAAY,KAAK,EAAE,CAAC;YACzB,OAAO,IAAI,CAAC,KAAK,CAAC,IAAA,mCAAsB,EAAC,GAAG,EAAE,OAAO,EAAE,KAAK,EAAE,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,SAAS,EAAE,GAAG,IAAI,CAAC,CAAC,CAAC;QACrG,CAAC;aAAM,CAAC;YACN,IAAI,OAAO,EAAE,CAAC;gBACZ,OAAO,IAAI,CAAC,KAAK,CAAC,IAAA,mCAAsB,EAAC,GAAG,EAAE,IAAW,EAAE,KAAK,EAAE,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,SAAS,EAAE,GAAG,CAAC,OAAO,EAAE,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;YACvH,CAAC;iBAAM,CAAC;gBACN,OAAO,IAAI,CAAC,KAAK,CAAC,IAAA,mCAAsB,EAAC,GAAG,EAAE,IAAW,EAAE,KAAK,EAAE,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,SAAS,EAAE,GAAG,IAAI,CAAC,CAAC,CAAC;YACzG,CAAC;QACH,CAAC;IACH,CAAC,CAAC;AACJ,CAAC;AAED;;GAEG;AAEI,IAAM,eAAe,GAArB,MAAM,eAAgB,SAAQ,gBAAG;IACtC,YAAmB,IAAY,EAAE,SAAmC,EAAY,MAAY;QAC1F,KAAK,EAAE,CAAC;QADS,SAAI,GAAJ,IAAI,CAAQ;QAAiD,WAAM,GAAN,MAAM,CAAM;QAG1F,IAAI,CAAC,SAAS,GAAG,SAAS,IAAI,EAAE,CAAC;IACnC,CAAC;IAEM,OAAO;QACZ,MAAM,MAAM,GAAG,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,6BAAa,CAAC,CAAC;QAEjD,IAAI,CAAC,MAAM,EAAE,CAAC;YACZ,MAAM,IAAI,KAAK,CAAC,uGAAuG,CAAC,CAAC;QAC3H,CAAC;QAED,IAAI,CAAC,OAAO,GAAG,MAAM,CAAC,GAAG,CAAc,QAAQ,EAAE;YAC/C,OAAO,EAAE;gBACP;oBACE,IAAI,EAAE,SAAS;oBACf,IAAI,EAAE,eAAe;iBACtB;aACF;YACD,KAAK,EAAE,CAAC,EAAE,IAAI,EAAE,GAAG,EAAE,KAAK,EAAE,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,CAAC;SAC1D,CAAC,CAAC;QAEH,sBAAsB;QACtB,4EAA4E;QAC5E,IAAI,CAAC,OAAO,CAAC,OAAO,GAAG,gBAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE;YAC/D,OAAO,CAAC,CAAC,IAAI,KAAK,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,IAAI,KAAK,CAAC,CAAC,IAAI,CAAC;QAChD,CAAC,CAAC,CAAC;QAEH,IAAI,CAAC,kBAAkB,EAAE,CAAC;QAC1B,IAAI,CAAC,iBAAiB,EAAE,CAAC;QAEzB,KAAK,CAAC,OAAO,EAAE,CAAC;QAEhB,gBAAG,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;IACnC,CAAC;IAIM,KAAK,CAAC,GAAmB,EAAE,OAAuB,EAAE,GAAG,IAAW;QACvE,SAAS,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,qBAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,EAAE,OAAO,EAAE,GAAG,IAAI,CAAC,CAAC;IACjE,CAAC;IAIM,KAAK,CAAC,GAAmB,EAAE,OAAuB,EAAE,GAAG,IAAW;QACvE,SAAS,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,qBAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,EAAE,OAAO,EAAE,GAAG,IAAI,CAAC,CAAC;IACjE,CAAC;IAIM,IAAI,CAAC,GAAmB,EAAE,OAAuB,EAAE,GAAG,IAAW;QACtE,SAAS,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,qBAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,EAAE,OAAO,EAAE,GAAG,IAAI,CAAC,CAAC;IAChE,CAAC;IAIM,IAAI,CAAC,GAAmB,EAAE,OAAuB,EAAE,GAAG,IAAW;QACtE,SAAS,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,qBAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,EAAE,OAAO,EAAE,GAAG,IAAI,CAAC,CAAC;IAChE,CAAC;IAIM,KAAK,CAAC,GAAmB,EAAE,OAAuB,EAAE,GAAG,IAAW;QACvE,SAAS,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,qBAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,EAAE,OAAO,EAAE,GAAG,IAAI,CAAC,CAAC;IACjE,CAAC;IAIM,KAAK,CAAC,GAAmB,EAAE,OAAuB,EAAE,GAAG,IAAW;QACvE,SAAS,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,qBAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,EAAE,OAAO,EAAE,GAAG,IAAI,CAAC,CAAC;IACjE,CAAC;IAIM,QAAQ,CAAC,GAAmB,EAAE,OAAuB,EAAE,GAAG,IAAW;QAC1E,SAAS,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,qBAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC,GAAG,EAAE,OAAO,EAAE,GAAG,IAAI,CAAC,CAAC;IACpE,CAAC;IAIM,OAAO,CAAC,GAAmB,EAAE,OAAuB,EAAE,GAAG,IAAW;QACzE,SAAS,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,qBAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,EAAE,OAAO,EAAE,GAAG,IAAI,CAAC,CAAC;IACnE,CAAC;IAEM,KAAK,CAAC,KAAgB;QAC3B,IAAI,KAAK,CAAC,SAAS,CAAC,MAAM,KAAK,IAAI,CAAC,IAAI,EAAE,CAAC;YACzC,OAAO,OAAO,CAAC,UAAU,CAEvB,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,KAAK,CAAC,KAAK,IAAI,0BAAa,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE;gBAC/E,IAAI,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC;oBAChB,MAAM,IAAI,6BAAgB,CAAC,UAAU,CAAC,CAAC,IAAI,CAAC,MAAM,aAAa,CAAC,CAAC,IAAI,CAAC,IAAI,aAAa,CAAC,CAAC;gBAC3F,CAAC;gBAED,OAAO,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;YACjC,CAAC,CAAC,CACH,CAAC;QACJ,CAAC;QACD,OAAO,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;IAC7B,CAAC;IAES,iBAAiB;QACzB,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE;YAClC,MAAM,KAAK,GAAG,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE;gBAC9C,OAAO,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,KAAK,CAAC,CAAC,IAAI,CAAC;YACnF,CAAC,CAAC,CAAC;YAEH,IAAI,CAAC,KAAK,EAAE,CAAC;gBACX,MAAM,IAAI,0BAAa,CAAC,2BAA2B,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC;YAC/D,CAAC;YAED,OAAO,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE;gBACrB,OAAO;oBACL,QAAQ,EAAE,OAAE,CAAC,OAAO,CAAkC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;oBAClE,OAAO,EAAE,CAAC;oBACV,IAAI,EAAE,CAAC;iBACR,CAAC;YACJ,CAAC,CAAC,CAAC;QACL,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,IAAsB,EAAE,IAAsB,EAAE,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC,GAAG,IAAI,CAAC,EAAE,EAAE,CAAC,CAAC;IAC1F,CAAC;IAES,kBAAkB;QAC1B,MAAM,aAAa,GAAG,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE;YACpD,MAAM,CAAC,GAAG,IAAA,wBAAY,EAAC,CAAC,CAAC,IAAI,CAAC,CAAC;YAE/B,kCAAkC;YAClC,OAAO,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAC3B,CAAC,CAAC,CAAC;QAEH,uDAAuD;QACvD,MAAM,eAAe,GAAG,aAAa,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,GAAG,CAAC,CAAC;QAElE,kDAAkD;QAClD,IAAI,CAAC,KAAK,GAAG,eAAe;YAC1B,CAAC,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,GAAG,CAAC;YAC7C,CAAC,CAAC,aAAa,CAAC;IACpB,CAAC;CACF,CAAA;AA1IY,0CAAe;0BAAf,eAAe;IAD3B,IAAA,gBAAW,GAAE;qDAE6E,gBAAG;GADjF,eAAe,CA0I3B;AAED,MAAM,kBAAkB,GAAG,CAAC,SAAqB,EAAE,OAAe,EAAE,EAAE;IACpE,IAAI,gBAAG,CAAC,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE,CAAC;QAC7B,OAAO,gBAAG,CAAC,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;IAClC,CAAC;IAED,IAAI,CAAC,OAAE,CAAC,GAAG,CAAC,6BAAa,CAAC,EAAE,CAAC;QAC3B,IAAI,gBAAG,CAAC,eAAe,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE,CAAC;YACrC,OAAO,gBAAG,CAAC,eAAe,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;QAC1C,CAAC;QAED,MAAM,cAAc,GAAG,SAAS,CAAC,OAAO,CAAC,qCAAmB,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC;QACzE,gBAAG,CAAC,eAAe,CAAC,GAAG,CAAC,OAAO,EAAE,cAAc,CAAC,CAAC;QACjD,OAAO,cAAc,CAAC;IACxB,CAAC;IAED,OAAO,SAAS,CAAC,OAAO,CAAC,uBAAuB,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC;AAC/D,CAAC,CAAC;AAEF,6CAA6C;AAC7C,2CAA2C;AAC3C,2DAA2D;AAC3D,2CAA2C;AAC3C,OAAE,CAAC,QAAQ,CAAC,kBAAkB,CAAC,CAAC,EAAE,CAAC,SAAS,CAAC,CAAC;AAE9C,6CAA6C;AAC7C,mDAAmD;AACnD,cAAc;AACd,OAAE,CAAC,QAAQ,CAAC,kBAAkB,CAAC,CAAC,EAAE,CAAC,gBAAG,CAAC,CAAC;AAExC,uCAAuC;AACvC,8BAA8B;AAC9B,2CAA2C;AAC3C,OAAE,CAAC,QAAQ,CAAC,eAAe,CAAC,CAAC,EAAE,CAAC,uBAAuB,CAAC,CAAC"}
|
|
1
|
+
{"version":3,"file":"log.js","sourceRoot":"","sources":["../../src/log.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import { Log, PerfSink, IPerfMetric, IPerfRollup } from "@spinajs/log-common";
|
|
2
|
+
/**
|
|
3
|
+
* Default {@link PerfSink}: renders perf measurements as structured log entries
|
|
4
|
+
* through the normal targets/filters/rules pipeline, on a dedicated `perf`
|
|
5
|
+
* logger. Spans over their per-name threshold log at `warn`; under-threshold
|
|
6
|
+
* spans log at `trace` ( kept for on-demand visibility, cheaply gated out when
|
|
7
|
+
* trace routing is off ). Rollups log one `info` line.
|
|
8
|
+
*/
|
|
9
|
+
export declare class LogMetricSink extends PerfSink {
|
|
10
|
+
protected Log: Log;
|
|
11
|
+
protected Enabled: boolean;
|
|
12
|
+
protected Thresholds: Record<string, number>;
|
|
13
|
+
protected OverLevel: "warn" | "error" | "info" | "debug" | "trace";
|
|
14
|
+
protected UnderLevel: "warn" | "error" | "info" | "debug" | "trace";
|
|
15
|
+
protected LogCounters: boolean;
|
|
16
|
+
private thresholdFor;
|
|
17
|
+
collect(metric: IPerfMetric): void;
|
|
18
|
+
onScopeEnd(rollup: IPerfRollup): void;
|
|
19
|
+
/**
|
|
20
|
+
* Emit through the log's MERGING-OBJECT form ( fields object FIRST, then the
|
|
21
|
+
* message string ) so the structured variables ( durationMs, labels, sql,
|
|
22
|
+
* error ) are attached to the entry. The `@spinajs/log` API treats a trailing
|
|
23
|
+
* object as a printf argument, so passing fields last would silently drop
|
|
24
|
+
* them. See the `warn(fields, message?)` overload on the `Log` base class.
|
|
25
|
+
*/
|
|
26
|
+
private emitAt;
|
|
27
|
+
}
|
|
28
|
+
//# sourceMappingURL=LogMetricSink.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"LogMetricSink.d.ts","sourceRoot":"","sources":["../../../src/perf/LogMetricSink.ts"],"names":[],"mappings":"AAEA,OAAO,EAAU,GAAG,EAAE,QAAQ,EAAE,WAAW,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAEtF;;;;;;GAMG;AACH,qBAEa,aAAc,SAAQ,QAAQ;IAEzC,SAAS,CAAC,GAAG,EAAG,GAAG,CAAC;IAGpB,SAAS,CAAC,OAAO,EAAG,OAAO,CAAC;IAG5B,SAAS,CAAC,UAAU,EAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAG9C,SAAS,CAAC,SAAS,EAAG,MAAM,GAAG,OAAO,GAAG,MAAM,GAAG,OAAO,GAAG,OAAO,CAAC;IAGpE,SAAS,CAAC,UAAU,EAAG,MAAM,GAAG,OAAO,GAAG,MAAM,GAAG,OAAO,GAAG,OAAO,CAAC;IAGrE,SAAS,CAAC,WAAW,EAAG,OAAO,CAAC;IAEhC,OAAO,CAAC,YAAY;IAKb,OAAO,CAAC,MAAM,EAAE,WAAW,GAAG,IAAI;IA0BlC,UAAU,CAAC,MAAM,EAAE,WAAW,GAAG,IAAI;IAc5C;;;;;;OAMG;IACH,OAAO,CAAC,MAAM;CAmBf"}
|
|
@@ -0,0 +1,120 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
|
|
3
|
+
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
4
|
+
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
5
|
+
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
|
6
|
+
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
7
|
+
};
|
|
8
|
+
var __metadata = (this && this.__metadata) || function (k, v) {
|
|
9
|
+
if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
|
|
10
|
+
};
|
|
11
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
12
|
+
exports.LogMetricSink = void 0;
|
|
13
|
+
const di_1 = require("@spinajs/di");
|
|
14
|
+
const configuration_1 = require("@spinajs/configuration");
|
|
15
|
+
const log_common_1 = require("@spinajs/log-common");
|
|
16
|
+
/**
|
|
17
|
+
* Default {@link PerfSink}: renders perf measurements as structured log entries
|
|
18
|
+
* through the normal targets/filters/rules pipeline, on a dedicated `perf`
|
|
19
|
+
* logger. Spans over their per-name threshold log at `warn`; under-threshold
|
|
20
|
+
* spans log at `trace` ( kept for on-demand visibility, cheaply gated out when
|
|
21
|
+
* trace routing is off ). Rollups log one `info` line.
|
|
22
|
+
*/
|
|
23
|
+
let LogMetricSink = class LogMetricSink extends log_common_1.PerfSink {
|
|
24
|
+
thresholdFor(name) {
|
|
25
|
+
const t = this.Thresholds ?? {};
|
|
26
|
+
return t[name] ?? t.default ?? 0;
|
|
27
|
+
}
|
|
28
|
+
collect(metric) {
|
|
29
|
+
if (!this.Enabled)
|
|
30
|
+
return;
|
|
31
|
+
if (metric.kind === "span") {
|
|
32
|
+
const dur = metric.durationMs ?? 0;
|
|
33
|
+
// `metric.fields` already carries `error` for a failed span ( set by the
|
|
34
|
+
// facade ), so the log's error serializer runs when this object is logged.
|
|
35
|
+
const fields = { durationMs: dur, ...(metric.labels ?? {}), ...(metric.fields ?? {}) };
|
|
36
|
+
if (metric.error !== undefined) {
|
|
37
|
+
this.emitAt("error", `${metric.name} failed after ${dur.toFixed(1)}ms`, fields);
|
|
38
|
+
return;
|
|
39
|
+
}
|
|
40
|
+
const threshold = this.thresholdFor(metric.name);
|
|
41
|
+
const slow = threshold > 0 && dur >= threshold;
|
|
42
|
+
const level = slow ? this.OverLevel : this.UnderLevel;
|
|
43
|
+
this.emitAt(level, `${slow ? "Slow " : ""}${metric.name}: ${dur.toFixed(1)}ms`, fields);
|
|
44
|
+
return;
|
|
45
|
+
}
|
|
46
|
+
if (this.LogCounters && (metric.kind === "counter" || metric.kind === "value")) {
|
|
47
|
+
this.emitAt("trace", `${metric.name}=${metric.value}`, { ...(metric.labels ?? {}) });
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
onScopeEnd(rollup) {
|
|
51
|
+
if (!this.Enabled)
|
|
52
|
+
return;
|
|
53
|
+
const parts = Object.entries(rollup.byName)
|
|
54
|
+
.map(([n, e]) => `${n} x${e.count} ${e.totalMs.toFixed(0)}ms`)
|
|
55
|
+
.join(", ");
|
|
56
|
+
const tag = rollup.requestId ? ` [${rollup.requestId}]` : "";
|
|
57
|
+
this.emitAt("info", `perf rollup${tag}: ${parts || "no measurements"}`, {
|
|
58
|
+
requestId: rollup.requestId,
|
|
59
|
+
totalMs: rollup.totalMs,
|
|
60
|
+
byName: rollup.byName,
|
|
61
|
+
...(rollup.labels ?? {}),
|
|
62
|
+
});
|
|
63
|
+
}
|
|
64
|
+
/**
|
|
65
|
+
* Emit through the log's MERGING-OBJECT form ( fields object FIRST, then the
|
|
66
|
+
* message string ) so the structured variables ( durationMs, labels, sql,
|
|
67
|
+
* error ) are attached to the entry. The `@spinajs/log` API treats a trailing
|
|
68
|
+
* object as a printf argument, so passing fields last would silently drop
|
|
69
|
+
* them. See the `warn(fields, message?)` overload on the `Log` base class.
|
|
70
|
+
*/
|
|
71
|
+
emitAt(level, message, fields) {
|
|
72
|
+
switch (level) {
|
|
73
|
+
case "error":
|
|
74
|
+
this.Log.error(fields, message);
|
|
75
|
+
break;
|
|
76
|
+
case "warn":
|
|
77
|
+
this.Log.warn(fields, message);
|
|
78
|
+
break;
|
|
79
|
+
case "info":
|
|
80
|
+
this.Log.info(fields, message);
|
|
81
|
+
break;
|
|
82
|
+
case "debug":
|
|
83
|
+
this.Log.debug(fields, message);
|
|
84
|
+
break;
|
|
85
|
+
default:
|
|
86
|
+
this.Log.trace(fields, message);
|
|
87
|
+
break;
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
};
|
|
91
|
+
exports.LogMetricSink = LogMetricSink;
|
|
92
|
+
__decorate([
|
|
93
|
+
(0, log_common_1.Logger)("perf"),
|
|
94
|
+
__metadata("design:type", log_common_1.Log)
|
|
95
|
+
], LogMetricSink.prototype, "Log", void 0);
|
|
96
|
+
__decorate([
|
|
97
|
+
(0, configuration_1.Config)("logger.perf.enabled", { defaultValue: true }),
|
|
98
|
+
__metadata("design:type", Boolean)
|
|
99
|
+
], LogMetricSink.prototype, "Enabled", void 0);
|
|
100
|
+
__decorate([
|
|
101
|
+
(0, configuration_1.Config)("logger.perf.thresholds", { defaultValue: { "orm.query": 200, "http.request": 1000, default: 0 } }),
|
|
102
|
+
__metadata("design:type", Object)
|
|
103
|
+
], LogMetricSink.prototype, "Thresholds", void 0);
|
|
104
|
+
__decorate([
|
|
105
|
+
(0, configuration_1.Config)("logger.perf.overThresholdLevel", { defaultValue: "warn" }),
|
|
106
|
+
__metadata("design:type", String)
|
|
107
|
+
], LogMetricSink.prototype, "OverLevel", void 0);
|
|
108
|
+
__decorate([
|
|
109
|
+
(0, configuration_1.Config)("logger.perf.underThresholdLevel", { defaultValue: "trace" }),
|
|
110
|
+
__metadata("design:type", String)
|
|
111
|
+
], LogMetricSink.prototype, "UnderLevel", void 0);
|
|
112
|
+
__decorate([
|
|
113
|
+
(0, configuration_1.Config)("logger.perf.logCounters", { defaultValue: false }),
|
|
114
|
+
__metadata("design:type", Boolean)
|
|
115
|
+
], LogMetricSink.prototype, "LogCounters", void 0);
|
|
116
|
+
exports.LogMetricSink = LogMetricSink = __decorate([
|
|
117
|
+
(0, di_1.Singleton)(),
|
|
118
|
+
(0, di_1.Injectable)(log_common_1.PerfSink)
|
|
119
|
+
], LogMetricSink);
|
|
120
|
+
//# sourceMappingURL=LogMetricSink.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"LogMetricSink.js","sourceRoot":"","sources":["../../../src/perf/LogMetricSink.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import { IMeasureOpts } from "@spinajs/log-common";
|
|
2
|
+
/**
|
|
3
|
+
* Method decorator that times the wrapped method via {@link Perf.measure}. Name
|
|
4
|
+
* defaults to `${ClassName}.${method}`. Works for sync and async methods ( the
|
|
5
|
+
* facade awaits a returned thenable ). Uses the same legacy-decorator signature
|
|
6
|
+
* as the rest of the framework ( `experimentalDecorators` ).
|
|
7
|
+
*/
|
|
8
|
+
export declare function Measure(name?: string, opts?: IMeasureOpts): (target: object, propertyKey: string | symbol, descriptor: PropertyDescriptor) => PropertyDescriptor;
|
|
9
|
+
//# sourceMappingURL=measure.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"measure.d.ts","sourceRoot":"","sources":["../../../src/perf/measure.ts"],"names":[],"mappings":"AAAA,OAAO,EAAQ,YAAY,EAAE,MAAM,qBAAqB,CAAC;AAEzD;;;;;GAKG;AACH,wBAAgB,OAAO,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,YAAY,IACvC,QAAQ,MAAM,EAAE,aAAa,MAAM,GAAG,MAAM,EAAE,YAAY,kBAAkB,KAAG,kBAAkB,CAQnH"}
|