@zudojs/logger 1.4.3 → 1.5.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/README.md +34 -0
- package/dist/index.d.ts +0 -1
- package/dist/index.js +0 -1
- package/dist/loggerContext/index.d.ts +0 -1
- package/dist/loggerContext/index.js +0 -1
- package/dist/loggerContext/loggerContext.core.d.ts +0 -1
- package/dist/loggerContext/loggerContext.core.js +0 -1
- package/dist/loggerContext/loggerContext.type.d.ts +0 -1
- package/dist/loggerContext/loggerContext.type.js +0 -1
- package/dist/loggerContext/loggerContextCreate.d.ts +0 -1
- package/dist/loggerContext/loggerContextCreate.js +0 -1
- package/dist/loggerContext/loggerContextSerialize.d.ts +0 -1
- package/dist/loggerContext/loggerContextSerialize.js +0 -1
- package/dist/loggerContext/loggerContextStorage.d.ts +0 -1
- package/dist/loggerContext/loggerContextStorage.js +0 -1
- package/dist/loggerCore/core/index.d.ts +0 -1
- package/dist/loggerCore/core/index.js +0 -1
- package/dist/loggerCore/core/loggerCore.context.d.ts +0 -1
- package/dist/loggerCore/core/loggerCore.context.js +0 -1
- package/dist/loggerCore/core/loggerCore.core.d.ts +0 -1
- package/dist/loggerCore/core/loggerCore.core.js +0 -1
- package/dist/loggerCore/core/loggerCore.type.d.ts +0 -1
- package/dist/loggerCore/core/loggerCore.type.js +0 -1
- package/dist/loggerCore/helpers/index.d.ts +0 -1
- package/dist/loggerCore/helpers/index.js +0 -1
- package/dist/loggerCore/helpers/loggerCore.helper.d.ts +0 -1
- package/dist/loggerCore/helpers/loggerCore.helper.js +0 -1
- package/dist/loggerCore/helpers/loggerCoreHelpers.d.ts +0 -1
- package/dist/loggerCore/helpers/loggerCoreHelpers.js +0 -1
- package/dist/loggerCore/helpers/loggerCoreMethods/index.d.ts +0 -1
- package/dist/loggerCore/helpers/loggerCoreMethods/index.js +0 -1
- package/dist/loggerCore/helpers/loggerCoreMethods/loggerCoreMethods.child.d.ts +0 -1
- package/dist/loggerCore/helpers/loggerCoreMethods/loggerCoreMethods.child.js +0 -1
- package/dist/loggerCore/helpers/loggerCoreMethods/loggerCoreMethods.dispatch.d.ts +0 -1
- package/dist/loggerCore/helpers/loggerCoreMethods/loggerCoreMethods.dispatch.js +0 -1
- package/dist/loggerCore/helpers/loggerCoreMethods/loggerCoreMethods.entry.d.ts +0 -1
- package/dist/loggerCore/helpers/loggerCoreMethods/loggerCoreMethods.entry.js +0 -1
- package/dist/loggerCore/helpers/loggerCoreMethods/loggerCoreMethods.level.d.ts +0 -1
- package/dist/loggerCore/helpers/loggerCoreMethods/loggerCoreMethods.level.js +0 -1
- package/dist/loggerCore/helpers/loggerCoreMethods/loggerCoreMethods.lifecycle.d.ts +0 -1
- package/dist/loggerCore/helpers/loggerCoreMethods/loggerCoreMethods.lifecycle.js +0 -1
- package/dist/loggerCore/helpers/loggerCoreMethods.logLevels.d.ts +0 -1
- package/dist/loggerCore/helpers/loggerCoreMethods.logLevels.js +0 -1
- package/dist/loggerCore/helpers/loggerCoreMethods.loggerProps.d.ts +0 -1
- package/dist/loggerCore/helpers/loggerCoreMethods.loggerProps.js +0 -1
- package/dist/loggerCore/index.d.ts +0 -1
- package/dist/loggerCore/index.js +0 -1
- package/dist/loggerEntry/index.d.ts +0 -1
- package/dist/loggerEntry/index.js +0 -1
- package/dist/loggerEntry/loggerEntry.core.d.ts +0 -1
- package/dist/loggerEntry/loggerEntry.core.js +0 -1
- package/dist/loggerEntry/loggerEntry.secretFields.d.ts +0 -1
- package/dist/loggerEntry/loggerEntry.secretFields.js +0 -1
- package/dist/loggerEntry/loggerEntry.type.d.ts +0 -1
- package/dist/loggerEntry/loggerEntry.type.js +0 -1
- package/dist/loggerEntry/loggerEntryCreate.d.ts +0 -1
- package/dist/loggerEntry/loggerEntryCreate.js +0 -1
- package/dist/loggerEntry/loggerEntryHelpers/index.d.ts +2 -3
- package/dist/loggerEntry/loggerEntryHelpers/index.js +1 -2
- package/dist/loggerEntry/loggerEntryHelpers/loggerEntryHelpers.interfaces.d.ts +0 -1
- package/dist/loggerEntry/loggerEntryHelpers/loggerEntryHelpers.interfaces.js +0 -1
- package/dist/loggerEntry/loggerEntryHelpers/loggerEntryHelpers.sanitize.d.ts +18 -1
- package/dist/loggerEntry/loggerEntryHelpers/loggerEntryHelpers.sanitize.js +58 -2
- package/dist/loggerEntry/loggerEntryHelpers/loggerEntryHelpers.serialize.d.ts +0 -1
- package/dist/loggerEntry/loggerEntryHelpers/loggerEntryHelpers.serialize.js +0 -1
- package/dist/loggerEntry/loggerEntryHelpers/loggerEntryHelpers.types.d.ts +0 -1
- package/dist/loggerEntry/loggerEntryHelpers/loggerEntryHelpers.types.js +0 -1
- package/dist/loggerEntry/loggerEntryHelpers/loggerEntryHelpers.valueSerialize.d.ts +0 -1
- package/dist/loggerEntry/loggerEntryHelpers/loggerEntryHelpers.valueSerialize.js +6 -2
- package/dist/loggerEntry/loggerEntrySerialize.d.ts +0 -1
- package/dist/loggerEntry/loggerEntrySerialize.js +0 -1
- package/dist/loggerErrors/index.d.ts +0 -1
- package/dist/loggerErrors/index.js +0 -1
- package/dist/loggerErrors/loggerError.base.d.ts +0 -1
- package/dist/loggerErrors/loggerError.base.js +0 -1
- package/dist/loggerErrors/loggerError.helpers.d.ts +0 -1
- package/dist/loggerErrors/loggerError.helpers.js +0 -1
- package/dist/loggerFactory/index.d.ts +0 -1
- package/dist/loggerFactory/index.js +0 -1
- package/dist/loggerFactory/loggerFactory.core.d.ts +0 -1
- package/dist/loggerFactory/loggerFactory.core.js +0 -1
- package/dist/loggerFormatter/index.d.ts +0 -1
- package/dist/loggerFormatter/index.js +0 -1
- package/dist/loggerFormatter/loggerFormatter.core.d.ts +0 -1
- package/dist/loggerFormatter/loggerFormatter.core.js +0 -1
- package/dist/loggerFormatter/loggerFormatter.type.d.ts +0 -1
- package/dist/loggerFormatter/loggerFormatter.type.js +0 -1
- package/dist/loggerFormatter/loggerFormatterFormatters/index.d.ts +0 -1
- package/dist/loggerFormatter/loggerFormatterFormatters/index.js +0 -1
- package/dist/loggerFormatter/loggerFormatterFormatters/loggerFormatterFormatters.context.d.ts +0 -1
- package/dist/loggerFormatter/loggerFormatterFormatters/loggerFormatterFormatters.context.js +0 -1
- package/dist/loggerFormatter/loggerFormatterFormatters/loggerFormatterFormatters.d.ts +0 -1
- package/dist/loggerFormatter/loggerFormatterFormatters/loggerFormatterFormatters.js +0 -1
- package/dist/loggerFormatter/loggerFormatterFormatters/loggerFormatterFormatters.json.d.ts +0 -1
- package/dist/loggerFormatter/loggerFormatterFormatters/loggerFormatterFormatters.json.js +0 -1
- package/dist/loggerFormatter/loggerFormatterFormatters/loggerFormatterFormatters.metadata.d.ts +0 -1
- package/dist/loggerFormatter/loggerFormatterFormatters/loggerFormatterFormatters.metadata.js +0 -1
- package/dist/loggerFormatter/loggerFormatterFormatters/loggerFormatterFormatters.text.d.ts +0 -1
- package/dist/loggerFormatter/loggerFormatterFormatters/loggerFormatterFormatters.text.js +0 -1
- package/dist/loggerFormatter/loggerFormatterGuard.d.ts +0 -1
- package/dist/loggerFormatter/loggerFormatterGuard.js +0 -1
- package/dist/loggerLevel/index.d.ts +0 -1
- package/dist/loggerLevel/index.js +0 -1
- package/dist/loggerLevel/loggerLevel.type.d.ts +0 -1
- package/dist/loggerLevel/loggerLevel.type.js +0 -1
- package/dist/loggerManager/index.d.ts +0 -1
- package/dist/loggerManager/index.js +0 -1
- package/dist/loggerManager/loggerManager.core.d.ts +0 -1
- package/dist/loggerManager/loggerManager.core.js +0 -1
- package/dist/loggerOptions/index.d.ts +0 -1
- package/dist/loggerOptions/index.js +0 -1
- package/dist/loggerOptions/loggerOptions.redact.d.ts +0 -1
- package/dist/loggerOptions/loggerOptions.redact.js +0 -1
- package/dist/loggerOptions/loggerOptions.type.d.ts +0 -1
- package/dist/loggerOptions/loggerOptions.type.js +0 -1
- package/dist/loggerTransport/index.d.ts +0 -1
- package/dist/loggerTransport/index.js +0 -1
- package/dist/loggerTransport/loggerTransport.core.d.ts +0 -1
- package/dist/loggerTransport/loggerTransport.core.js +0 -1
- package/dist/loggerTransport/loggerTransport.registry.d.ts +0 -1
- package/dist/loggerTransport/loggerTransport.registry.js +0 -1
- package/dist/loggerTransport/loggerTransport.type.d.ts +0 -1
- package/dist/loggerTransport/loggerTransport.type.js +0 -1
- package/dist/loggerTransport/loggerTransportComposite/index.d.ts +0 -1
- package/dist/loggerTransport/loggerTransportComposite/index.js +0 -1
- package/dist/loggerTransport/loggerTransportComposite/loggerTransportComposite.buffered.d.ts +0 -1
- package/dist/loggerTransport/loggerTransportComposite/loggerTransportComposite.buffered.js +0 -1
- package/dist/loggerTransport/loggerTransportComposite/loggerTransportComposite.d.ts +0 -1
- package/dist/loggerTransport/loggerTransportComposite/loggerTransportComposite.js +0 -1
- package/dist/loggerTransport/loggerTransportConsole/index.d.ts +0 -1
- package/dist/loggerTransport/loggerTransportConsole/index.js +0 -1
- package/dist/loggerTransport/loggerTransportConsole/loggerTransportConsole.core.d.ts +0 -1
- package/dist/loggerTransport/loggerTransportConsole/loggerTransportConsole.core.js +0 -1
- package/dist/loggerTransport/loggerTransportGuard.d.ts +0 -1
- package/dist/loggerTransport/loggerTransportGuard.js +0 -1
- package/dist/loggerTransport/loggerTransportHelpers/index.d.ts +0 -1
- package/dist/loggerTransport/loggerTransportHelpers/index.js +0 -1
- package/dist/loggerTransport/loggerTransportHelpers/loggerTransportHelpers.d.ts +0 -1
- package/dist/loggerTransport/loggerTransportHelpers/loggerTransportHelpers.js +0 -1
- package/package.json +2 -2
package/README.md
CHANGED
|
@@ -28,6 +28,34 @@ logger.error("Connection failed", { error: err.message });
|
|
|
28
28
|
await logger.flush(); // drain in-flight writes before exit
|
|
29
29
|
```
|
|
30
30
|
|
|
31
|
+
## Logging errors
|
|
32
|
+
|
|
33
|
+
```typescript
|
|
34
|
+
logger.log(LoggerLevel.ERROR, "payment failed", {
|
|
35
|
+
error: err,
|
|
36
|
+
metadata: { orderId },
|
|
37
|
+
}); // typed: err is the entry's `error`, stack included
|
|
38
|
+
|
|
39
|
+
logger.error("payment failed", { err }); // err becomes plain data in metadata
|
|
40
|
+
```
|
|
41
|
+
|
|
42
|
+
The level methods take `(message, metadata?)`. In JavaScript, or loosely
|
|
43
|
+
typed TypeScript, `logger.error("payment failed", err)` also works at
|
|
44
|
+
runtime — the `Error` is recorded as the entry's `error` — but that call
|
|
45
|
+
does not type-check; the typed way to attach an error is
|
|
46
|
+
`log(level, message, { error, metadata })`. (The signature is kept single
|
|
47
|
+
on purpose: an overload or a widened union broke custom `Logger`
|
|
48
|
+
implementations and structural logger types.)
|
|
49
|
+
|
|
50
|
+
An `Error` placed _inside_ metadata or context (`{ err }`, `{ cause: err }`,
|
|
51
|
+
nested anywhere) is normalized when the entry is built into
|
|
52
|
+
`{ name, message, stack, ...ownFields, cause }`, with secret-named own
|
|
53
|
+
fields redacted and a self-referential `cause` shown as `"[Circular]"`, so
|
|
54
|
+
a custom transport that stringifies `entry.metadata` sees the error rather
|
|
55
|
+
than `{}`. `isLogErrorValue(value)` tells such an object apart from
|
|
56
|
+
ordinary metadata; the text formatter's `includeStackTrace: false` still
|
|
57
|
+
leaves its `stack` out.
|
|
58
|
+
|
|
31
59
|
## Levels
|
|
32
60
|
|
|
33
61
|
`fatal` (0), `error` (1), `warn` (2), `info` (3), `debug` (4), `trace`
|
|
@@ -159,6 +187,12 @@ createLogger({ redact: { enabled: false } }); // same as redact: false
|
|
|
159
187
|
`replacement`). `true` or omitting it keeps the default. Child loggers inherit
|
|
160
188
|
the parent's setting.
|
|
161
189
|
|
|
190
|
+
This is `@zudojs/logger`'s own redaction and it needs no setup.
|
|
191
|
+
`@zudojs/core`'s `ConsoleLogger` is a different logger with a different
|
|
192
|
+
mechanism — a `createLogRedactor()` hook with its own key list — and this
|
|
193
|
+
package has no `createLogRedactor`. If an application uses both, configure
|
|
194
|
+
each; a key added to one is not redacted by the other.
|
|
195
|
+
|
|
162
196
|
## Log injection
|
|
163
197
|
|
|
164
198
|
Text-shaped formatters escape control characters (C0, DEL, C1 and
|
package/dist/index.d.ts
CHANGED
package/dist/index.js
CHANGED
|
@@ -5,4 +5,3 @@ export type { LoggerContextValue, LoggerContextData, LoggerContextIdentifiers, L
|
|
|
5
5
|
export { createLoggerContextStorage } from "./loggerContextStorage.js";
|
|
6
6
|
export { createLoggerContextId, createLoggerContext, createEmptyLoggerContext, mergeLoggerContexts, withLoggerContext, withLoggerIdentifiers, } from "./loggerContextCreate.js";
|
|
7
7
|
export { contextToLogMetadata, serializeLoggerContext, isLoggerContext, getCurrentLoggerContextMetadata, } from "./loggerContextSerialize.js";
|
|
8
|
-
//# sourceMappingURL=loggerContext.core.d.ts.map
|
|
@@ -4,4 +4,3 @@
|
|
|
4
4
|
export { createLoggerContextStorage } from "./loggerContextStorage.js";
|
|
5
5
|
export { createLoggerContextId, createLoggerContext, createEmptyLoggerContext, mergeLoggerContexts, withLoggerContext, withLoggerIdentifiers, } from "./loggerContextCreate.js";
|
|
6
6
|
export { contextToLogMetadata, serializeLoggerContext, isLoggerContext, getCurrentLoggerContextMetadata, } from "./loggerContextSerialize.js";
|
|
7
|
-
//# sourceMappingURL=loggerContext.core.js.map
|
|
@@ -28,4 +28,3 @@ export declare function withLoggerContext(context: LoggerContext, metadata: Logg
|
|
|
28
28
|
* Extends a logger context with identifiers.
|
|
29
29
|
*/
|
|
30
30
|
export declare function withLoggerIdentifiers(context: LoggerContext, identifiers: LoggerContextIdentifiers): LoggerContext;
|
|
31
|
-
//# sourceMappingURL=loggerContextCreate.d.ts.map
|
|
@@ -21,4 +21,3 @@ export declare function isLoggerContext(value: unknown): value is LoggerContext;
|
|
|
21
21
|
* Creates a context-aware metadata object.
|
|
22
22
|
*/
|
|
23
23
|
export declare function getCurrentLoggerContextMetadata(storage: LoggerContextStorage): LogMetadata;
|
|
24
|
-
//# sourceMappingURL=loggerContextSerialize.d.ts.map
|
|
@@ -18,4 +18,3 @@ export declare function assertMutable(mutable: boolean): void;
|
|
|
18
18
|
* Handles infrastructure errors (transport/formatter errors).
|
|
19
19
|
*/
|
|
20
20
|
export declare function handleInfrastructureError(throwTransportErrors: boolean, error: Error): void;
|
|
21
|
-
//# sourceMappingURL=loggerCoreHelpers.d.ts.map
|
|
@@ -8,4 +8,3 @@ export { dispatchEntry, dispatchEntrySync, } from "./loggerCoreMethods.dispatch.
|
|
|
8
8
|
export { logAtLevel, levelOptions } from "./loggerCoreMethods.level.js";
|
|
9
9
|
export { childLogger, withContextLogger } from "./loggerCoreMethods.child.js";
|
|
10
10
|
export { setLoggerLevel, enableLogger, disableLogger, flushLogger, closeLogger, } from "./loggerCoreMethods.lifecycle.js";
|
|
11
|
-
//# sourceMappingURL=index.d.ts.map
|
|
@@ -8,4 +8,3 @@ export { dispatchEntry, dispatchEntrySync, } from "./loggerCoreMethods.dispatch.
|
|
|
8
8
|
export { logAtLevel, levelOptions } from "./loggerCoreMethods.level.js";
|
|
9
9
|
export { childLogger, withContextLogger } from "./loggerCoreMethods.child.js";
|
|
10
10
|
export { setLoggerLevel, enableLogger, disableLogger, flushLogger, closeLogger, } from "./loggerCoreMethods.lifecycle.js";
|
|
11
|
-
//# sourceMappingURL=index.js.map
|
|
@@ -13,4 +13,3 @@ export declare function childLogger(ctx: ZudojsLoggerContext, options?: ChildLog
|
|
|
13
13
|
* Creates a logger with scoped context.
|
|
14
14
|
*/
|
|
15
15
|
export declare function withContextLogger(ctx: ZudojsLoggerContext, context: LoggerContext): Logger;
|
|
16
|
-
//# sourceMappingURL=loggerCoreMethods.child.d.ts.map
|
|
@@ -18,4 +18,3 @@ export declare function dispatchEntry(configuration: LoggerConfiguration, entry:
|
|
|
18
18
|
* both settings behaved identically.
|
|
19
19
|
*/
|
|
20
20
|
export declare function dispatchEntrySync(configuration: LoggerConfiguration, entry: LoggerEntry, handleError: (error: Error) => void): void | Promise<void>;
|
|
21
|
-
//# sourceMappingURL=loggerCoreMethods.dispatch.d.ts.map
|
|
@@ -15,4 +15,3 @@ import type { LoggerConfiguration, LogOptions } from "../../../loggerOptions/log
|
|
|
15
15
|
export declare function createEntry(configuration: LoggerConfiguration, contextStorage: {
|
|
16
16
|
get(): import("../../../loggerContext/loggerContext.core.js").LoggerContext | undefined;
|
|
17
17
|
}, level: LoggerLevel, message: string, options: LogOptions, onMetadataError?: (key: string, error: unknown) => void): LoggerEntry;
|
|
18
|
-
//# sourceMappingURL=loggerCoreMethods.entry.d.ts.map
|
|
@@ -15,4 +15,3 @@ export declare function levelOptions(metadata: LogOptions["metadata"] | undefine
|
|
|
15
15
|
* Level logging methods extracted from ZudojsLogger.
|
|
16
16
|
*/
|
|
17
17
|
export declare function logAtLevel(ctx: ZudojsLoggerContext, level: LoggerLevel, message: string, options?: LogOptions): void;
|
|
18
|
-
//# sourceMappingURL=loggerCoreMethods.level.d.ts.map
|
|
@@ -17,4 +17,3 @@ export declare function createLogMethods(ctx: ZudojsLoggerContext): {
|
|
|
17
17
|
trace: (message: string, metadata?: LogMetadata) => void;
|
|
18
18
|
log: (level: LoggerLevel, message: string, options?: LogOptions) => void;
|
|
19
19
|
};
|
|
20
|
-
//# sourceMappingURL=loggerCoreMethods.logLevels.d.ts.map
|
package/dist/loggerCore/index.js
CHANGED
|
@@ -16,4 +16,3 @@ export declare function normalizeLogMetadata(value: unknown): LogMetadata;
|
|
|
16
16
|
* Creates a LoggerEntry from an Error.
|
|
17
17
|
*/
|
|
18
18
|
export declare function createErrorLoggerEntry(error: Error, level: LoggerLevel, message?: string, metadata?: LogMetadata): LoggerEntry;
|
|
19
|
-
//# sourceMappingURL=loggerEntry.core.d.ts.map
|
|
@@ -16,4 +16,3 @@ export declare const DEFAULT_LOGGER_SECRET_FIELDS: readonly string[];
|
|
|
16
16
|
* Builds the default secret-field predicate from a word list.
|
|
17
17
|
*/
|
|
18
18
|
export declare function createDefaultSecretFieldMatcher(fields?: readonly string[]): (key: string) => boolean;
|
|
19
|
-
//# sourceMappingURL=loggerEntry.secretFields.d.ts.map
|
|
@@ -6,6 +6,5 @@
|
|
|
6
6
|
export type { LogValue, LogMetadata, LoggerSource, LoggerEntryContext, } from "./loggerEntryHelpers.types.js";
|
|
7
7
|
export type { LoggerEntry, LoggerEntryInput, } from "./loggerEntryHelpers.interfaces.js";
|
|
8
8
|
export { serializeLoggerEntry, serializeLoggerError, serializeLoggerValue, loggerLevelNameFallback, } from "./loggerEntryHelpers.serialize.js";
|
|
9
|
-
export { LOGGER_REDACTION_TOKEN, LOGGER_UNREADABLE_TOKEN, DEFAULT_LOGGER_SECRET_PATTERN, escapeLogText, hasLogControlCharacters, createSecretMatcher, redactLogValue, } from "./loggerEntryHelpers.sanitize.js";
|
|
10
|
-
export type { LoggerRedactionOptions } from "./loggerEntryHelpers.sanitize.js";
|
|
11
|
-
//# sourceMappingURL=index.d.ts.map
|
|
9
|
+
export { LOGGER_ERROR_VALUE, LOGGER_REDACTION_TOKEN, LOGGER_UNREADABLE_TOKEN, DEFAULT_LOGGER_SECRET_PATTERN, escapeLogText, hasLogControlCharacters, createSecretMatcher, isLogErrorValue, redactLogValue, } from "./loggerEntryHelpers.sanitize.js";
|
|
10
|
+
export type { LogErrorValue, LoggerRedactionOptions, } from "./loggerEntryHelpers.sanitize.js";
|
|
@@ -4,5 +4,4 @@
|
|
|
4
4
|
* Logger entry helper types and utilities.
|
|
5
5
|
*/
|
|
6
6
|
export { serializeLoggerEntry, serializeLoggerError, serializeLoggerValue, loggerLevelNameFallback, } from "./loggerEntryHelpers.serialize.js";
|
|
7
|
-
export { LOGGER_REDACTION_TOKEN, LOGGER_UNREADABLE_TOKEN, DEFAULT_LOGGER_SECRET_PATTERN, escapeLogText, hasLogControlCharacters, createSecretMatcher, redactLogValue, } from "./loggerEntryHelpers.sanitize.js";
|
|
8
|
-
//# sourceMappingURL=index.js.map
|
|
7
|
+
export { LOGGER_ERROR_VALUE, LOGGER_REDACTION_TOKEN, LOGGER_UNREADABLE_TOKEN, DEFAULT_LOGGER_SECRET_PATTERN, escapeLogText, hasLogControlCharacters, createSecretMatcher, isLogErrorValue, redactLogValue, } from "./loggerEntryHelpers.sanitize.js";
|
|
@@ -69,6 +69,24 @@ export declare function hasLogControlCharacters(value: string): boolean;
|
|
|
69
69
|
* Builds a predicate deciding whether a field name holds a secret.
|
|
70
70
|
*/
|
|
71
71
|
export declare function createSecretMatcher(options?: LoggerRedactionOptions): (key: string) => boolean;
|
|
72
|
+
/**
|
|
73
|
+
* Marks a plain object that {@link redactLogValue} produced from an
|
|
74
|
+
* `Error`, so a serializer can still tell it apart from ordinary metadata
|
|
75
|
+
* (the text formatter leaves its `stack` out when `includeStackTrace` is
|
|
76
|
+
* off). The property is a non-enumerable symbol: `JSON.stringify`, spreads
|
|
77
|
+
* and `Object.keys` never see it.
|
|
78
|
+
*/
|
|
79
|
+
export declare const LOGGER_ERROR_VALUE: unique symbol;
|
|
80
|
+
/** A normalized `Error` as it appears inside entry metadata and context. */
|
|
81
|
+
export interface LogErrorValue {
|
|
82
|
+
readonly name: string;
|
|
83
|
+
readonly message: string;
|
|
84
|
+
readonly stack?: string;
|
|
85
|
+
readonly cause?: unknown;
|
|
86
|
+
readonly [key: string]: unknown;
|
|
87
|
+
}
|
|
88
|
+
/** True when `value` is an `Error` normalized by {@link redactLogValue}. */
|
|
89
|
+
export declare function isLogErrorValue(value: unknown): value is LogErrorValue;
|
|
72
90
|
/**
|
|
73
91
|
* Recursively replaces secret-named fields with a redaction token.
|
|
74
92
|
*
|
|
@@ -83,4 +101,3 @@ export declare function createSecretMatcher(options?: LoggerRedactionOptions): (
|
|
|
83
101
|
* object merely referenced twice in one payload is logged both times.
|
|
84
102
|
*/
|
|
85
103
|
export declare function redactLogValue(value: unknown, isSecret: (key: string) => boolean, replacement?: string, seen?: WeakSet<object>, onReadError?: (key: string, error: unknown) => void): unknown;
|
|
86
|
-
//# sourceMappingURL=loggerEntryHelpers.sanitize.d.ts.map
|
|
@@ -105,6 +105,48 @@ function defineLogProperty(target, key, value) {
|
|
|
105
105
|
configurable: true,
|
|
106
106
|
});
|
|
107
107
|
}
|
|
108
|
+
/**
|
|
109
|
+
* Marks a plain object that {@link redactLogValue} produced from an
|
|
110
|
+
* `Error`, so a serializer can still tell it apart from ordinary metadata
|
|
111
|
+
* (the text formatter leaves its `stack` out when `includeStackTrace` is
|
|
112
|
+
* off). The property is a non-enumerable symbol: `JSON.stringify`, spreads
|
|
113
|
+
* and `Object.keys` never see it.
|
|
114
|
+
*/
|
|
115
|
+
export const LOGGER_ERROR_VALUE = Symbol.for("zudojs.logger.errorValue");
|
|
116
|
+
/** True when `value` is an `Error` normalized by {@link redactLogValue}. */
|
|
117
|
+
export function isLogErrorValue(value) {
|
|
118
|
+
return (typeof value === "object" &&
|
|
119
|
+
value !== null &&
|
|
120
|
+
value[LOGGER_ERROR_VALUE] === true);
|
|
121
|
+
}
|
|
122
|
+
/**
|
|
123
|
+
* Copies an `Error` into a plain object: `name`, `message` and `stack`
|
|
124
|
+
* first (they are non-enumerable on the error itself, which is why a
|
|
125
|
+
* stringified error is `{}`), then its own enumerable fields with their
|
|
126
|
+
* descriptors intact so a getter is still read by the redaction walk, then
|
|
127
|
+
* `cause`. The walk redacts and descends into all of them.
|
|
128
|
+
*/
|
|
129
|
+
function errorToPlainObject(error) {
|
|
130
|
+
const plain = {};
|
|
131
|
+
defineLogProperty(plain, "name", error.name);
|
|
132
|
+
defineLogProperty(plain, "message", error.message);
|
|
133
|
+
if (typeof error.stack === "string") {
|
|
134
|
+
defineLogProperty(plain, "stack", error.stack);
|
|
135
|
+
}
|
|
136
|
+
for (const key of Object.keys(error)) {
|
|
137
|
+
if (Object.hasOwn(plain, key))
|
|
138
|
+
continue;
|
|
139
|
+
const descriptor = Object.getOwnPropertyDescriptor(error, key);
|
|
140
|
+
if (descriptor)
|
|
141
|
+
Object.defineProperty(plain, key, descriptor);
|
|
142
|
+
}
|
|
143
|
+
if (!Object.hasOwn(plain, "cause") &&
|
|
144
|
+
"cause" in error &&
|
|
145
|
+
error.cause !== undefined) {
|
|
146
|
+
defineLogProperty(plain, "cause", error.cause);
|
|
147
|
+
}
|
|
148
|
+
return plain;
|
|
149
|
+
}
|
|
108
150
|
/**
|
|
109
151
|
* Recursively replaces secret-named fields with a redaction token.
|
|
110
152
|
*
|
|
@@ -122,12 +164,27 @@ export function redactLogValue(value, isSecret, replacement = LOGGER_REDACTION_T
|
|
|
122
164
|
if (value === null || typeof value !== "object") {
|
|
123
165
|
return value;
|
|
124
166
|
}
|
|
125
|
-
if (value instanceof Date
|
|
167
|
+
if (value instanceof Date) {
|
|
126
168
|
return value;
|
|
127
169
|
}
|
|
128
170
|
if (seen.has(value)) {
|
|
129
171
|
return "[Circular]";
|
|
130
172
|
}
|
|
173
|
+
// An Error keeps name/message/stack non-enumerable, so a transport that
|
|
174
|
+
// stringified `entry.metadata` saw `{ cause: {} }`. It becomes plain data
|
|
175
|
+
// here, before the entry is frozen, so every transport sees the same
|
|
176
|
+
// thing; its own fields are redacted like any other metadata.
|
|
177
|
+
if (value instanceof Error) {
|
|
178
|
+
seen.add(value);
|
|
179
|
+
try {
|
|
180
|
+
const redacted = redactLogValue(errorToPlainObject(value), isSecret, replacement, seen, onReadError);
|
|
181
|
+
Object.defineProperty(redacted, LOGGER_ERROR_VALUE, { value: true });
|
|
182
|
+
return redacted;
|
|
183
|
+
}
|
|
184
|
+
finally {
|
|
185
|
+
seen.delete(value);
|
|
186
|
+
}
|
|
187
|
+
}
|
|
131
188
|
seen.add(value);
|
|
132
189
|
try {
|
|
133
190
|
const descend = (item) => redactLogValue(item, isSecret, replacement, seen, onReadError);
|
|
@@ -168,4 +225,3 @@ export function redactLogValue(value, isSecret, replacement = LOGGER_REDACTION_T
|
|
|
168
225
|
seen.delete(value);
|
|
169
226
|
}
|
|
170
227
|
}
|
|
171
|
-
//# sourceMappingURL=loggerEntryHelpers.sanitize.js.map
|
|
@@ -18,4 +18,3 @@ export { serializeLoggerError, serializeLoggerValue, } from "./loggerEntryHelper
|
|
|
18
18
|
* a circular dependency into logger-entry.ts.
|
|
19
19
|
*/
|
|
20
20
|
export declare function loggerLevelNameFallback(level: import("../../loggerLevel/loggerLevel.type.js").LoggerLevel): import("../../loggerLevel/loggerLevel.type.js").LoggerLevelName;
|
|
21
|
-
//# sourceMappingURL=loggerEntryHelpers.serialize.d.ts.map
|
|
@@ -22,4 +22,3 @@ export declare function serializeLoggerError(error: {
|
|
|
22
22
|
* stack out of every Error found in the value.
|
|
23
23
|
*/
|
|
24
24
|
export declare function serializeLoggerValue(value: unknown, seen?: WeakSet<object>, includeErrorStack?: boolean): unknown;
|
|
25
|
-
//# sourceMappingURL=loggerEntryHelpers.valueSerialize.d.ts.map
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Logger entry value serialization.
|
|
3
3
|
*/
|
|
4
|
-
import { LOGGER_UNREADABLE_TOKEN } from "./loggerEntryHelpers.sanitize.js";
|
|
4
|
+
import { LOGGER_UNREADABLE_TOKEN, isLogErrorValue, } from "./loggerEntryHelpers.sanitize.js";
|
|
5
5
|
/**
|
|
6
6
|
* Serializes an error-like object into a plain object.
|
|
7
7
|
*
|
|
@@ -77,7 +77,12 @@ export function serializeLoggerValue(value, seen = new WeakSet(), includeErrorSt
|
|
|
77
77
|
}
|
|
78
78
|
return result;
|
|
79
79
|
}
|
|
80
|
+
// An Error already normalized by redaction is plain data; honour
|
|
81
|
+
// `includeErrorStack` for it exactly as for a live Error.
|
|
82
|
+
const omitStack = !includeErrorStack && isLogErrorValue(value);
|
|
80
83
|
for (const key of Object.keys(value)) {
|
|
84
|
+
if (omitStack && key === "stack")
|
|
85
|
+
continue;
|
|
81
86
|
let item;
|
|
82
87
|
try {
|
|
83
88
|
item = value[key];
|
|
@@ -94,4 +99,3 @@ export function serializeLoggerValue(value, seen = new WeakSet(), includeErrorSt
|
|
|
94
99
|
seen.delete(value);
|
|
95
100
|
}
|
|
96
101
|
}
|
|
97
|
-
//# sourceMappingURL=loggerEntryHelpers.valueSerialize.js.map
|