logquill 0.1.0 → 0.1.2
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 +132 -5
- package/dist/index.cjs +383 -1
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +208 -2
- package/dist/index.d.ts +208 -2
- package/dist/index.mjs +368 -2
- package/dist/index.mjs.map +1 -1
- package/package.json +1 -1
package/dist/index.d.cts
CHANGED
|
@@ -1,3 +1,209 @@
|
|
|
1
|
-
|
|
1
|
+
/** Log levels, shared by name and numeric weight with the logquill-python contract. */
|
|
2
|
+
declare enum Level {
|
|
3
|
+
TRACE = 5,
|
|
4
|
+
DEBUG = 10,
|
|
5
|
+
INFO = 20,
|
|
6
|
+
WARN = 30,
|
|
7
|
+
ERROR = 40,
|
|
8
|
+
FATAL = 50
|
|
9
|
+
}
|
|
10
|
+
/** A level given as a `Level`, a level name (any case), or its numeric weight. */
|
|
11
|
+
type LevelInput = Level | number | string;
|
|
12
|
+
/** The level's name, e.g. `levelName(Level.INFO) === "INFO"`. */
|
|
13
|
+
declare function levelName(level: Level): string;
|
|
14
|
+
/** Normalize a level given as a `Level`, level name, or numeric weight. Throws if unknown. */
|
|
15
|
+
declare function parseLevel(level: LevelInput): Level;
|
|
2
16
|
|
|
3
|
-
|
|
17
|
+
/** The cross-language record shape shared with logquill-python. */
|
|
18
|
+
interface LogRecord {
|
|
19
|
+
timestamp: string;
|
|
20
|
+
level: string;
|
|
21
|
+
logger: string;
|
|
22
|
+
message: string;
|
|
23
|
+
meta: Record<string, unknown>;
|
|
24
|
+
}
|
|
25
|
+
/** ISO8601 UTC timestamp with millisecond precision, matching Python's `utc_timestamp()`. */
|
|
26
|
+
declare function utcTimestamp(): string;
|
|
27
|
+
declare function createRecord(params: {
|
|
28
|
+
level: Level;
|
|
29
|
+
logger: string;
|
|
30
|
+
message: string;
|
|
31
|
+
meta: Record<string, unknown>;
|
|
32
|
+
}): LogRecord;
|
|
33
|
+
|
|
34
|
+
/** `format(record) -> string`, per the transport contract shared with logquill-python. */
|
|
35
|
+
interface Formatter {
|
|
36
|
+
format(record: LogRecord): string;
|
|
37
|
+
}
|
|
38
|
+
/** Serializes a record to the canonical JSON line shape. */
|
|
39
|
+
declare class JSONFormatter implements Formatter {
|
|
40
|
+
format(record: LogRecord): string;
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
/**
|
|
44
|
+
* The plugin pipeline hooks, matching the Python hook names: `beforeLog`,
|
|
45
|
+
* `afterLog`, `onError`. All hooks are optional — implement only what you need.
|
|
46
|
+
* A hook that throws cannot crash logging: the pipeline catches it, routes it
|
|
47
|
+
* to `onError`, and moves on.
|
|
48
|
+
*/
|
|
49
|
+
interface Plugin {
|
|
50
|
+
/** Return a (possibly modified) record, or `null` to drop it. */
|
|
51
|
+
beforeLog?(record: LogRecord): LogRecord | null;
|
|
52
|
+
/** Called after the record has been dispatched to every transport. */
|
|
53
|
+
afterLog?(record: LogRecord): void;
|
|
54
|
+
/** Called when one of this plugin's own hooks throws. */
|
|
55
|
+
onError?(error: unknown, record: LogRecord): void;
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
/**
|
|
59
|
+
* Injects fixed key/value pairs into every record's `meta`.
|
|
60
|
+
* A value already present in a record's own `meta` wins over the fixed context.
|
|
61
|
+
*/
|
|
62
|
+
declare class ContextPlugin implements Plugin {
|
|
63
|
+
readonly context: Record<string, unknown>;
|
|
64
|
+
constructor(context: Record<string, unknown>);
|
|
65
|
+
beforeLog(record: LogRecord): LogRecord;
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
declare const DEFAULT_REDACTED_KEYS: readonly string[];
|
|
69
|
+
interface RedactPluginOptions {
|
|
70
|
+
keys?: readonly string[];
|
|
71
|
+
replacement?: string;
|
|
72
|
+
}
|
|
73
|
+
/** Replaces sensitive `meta` values, matched by key (case-insensitive), with a placeholder. */
|
|
74
|
+
declare class RedactPlugin implements Plugin {
|
|
75
|
+
private readonly keys;
|
|
76
|
+
readonly replacement: string;
|
|
77
|
+
constructor(options?: RedactPluginOptions);
|
|
78
|
+
beforeLog(record: LogRecord): LogRecord;
|
|
79
|
+
}
|
|
80
|
+
|
|
81
|
+
interface SamplingPluginOptions {
|
|
82
|
+
rng?: () => number;
|
|
83
|
+
}
|
|
84
|
+
/** Keeps roughly `rate` of records (0.0-1.0), dropping the rest. */
|
|
85
|
+
declare class SamplingPlugin implements Plugin {
|
|
86
|
+
readonly rate: number;
|
|
87
|
+
private readonly rng;
|
|
88
|
+
constructor(rate: number, options?: SamplingPluginOptions);
|
|
89
|
+
beforeLog(record: LogRecord): LogRecord | null;
|
|
90
|
+
}
|
|
91
|
+
|
|
92
|
+
/**
|
|
93
|
+
* Sink for log records, per the cross-language transport contract:
|
|
94
|
+
* `format(record) -> string`, `write(formatted, record)`, `close()` on shutdown.
|
|
95
|
+
*/
|
|
96
|
+
declare abstract class Transport {
|
|
97
|
+
formatter: Formatter;
|
|
98
|
+
constructor(formatter?: Formatter);
|
|
99
|
+
format(record: LogRecord): string;
|
|
100
|
+
abstract write(formatted: string, record: LogRecord): void;
|
|
101
|
+
/** Flush/release resources on shutdown. No-op unless a transport overrides it. */
|
|
102
|
+
close(): void;
|
|
103
|
+
}
|
|
104
|
+
/** In-memory transport for tests: collects every (formatted, record) pair written to it. */
|
|
105
|
+
declare class CollectingTransport extends Transport {
|
|
106
|
+
readonly formatted: string[];
|
|
107
|
+
readonly records: LogRecord[];
|
|
108
|
+
closed: boolean;
|
|
109
|
+
write(formatted: string, record: LogRecord): void;
|
|
110
|
+
close(): void;
|
|
111
|
+
}
|
|
112
|
+
|
|
113
|
+
/** The subset of `console` this transport needs — swap in a fake for tests. */
|
|
114
|
+
interface ConsoleLike {
|
|
115
|
+
log(message: string): void;
|
|
116
|
+
error(message: string): void;
|
|
117
|
+
}
|
|
118
|
+
interface ConsoleTransportOptions {
|
|
119
|
+
formatter?: Formatter;
|
|
120
|
+
colorize?: boolean;
|
|
121
|
+
console?: ConsoleLike;
|
|
122
|
+
}
|
|
123
|
+
/**
|
|
124
|
+
* Writes to `console.log`, routing ERROR/FATAL to `console.error`, colorized by
|
|
125
|
+
* level. Uses the global `console` rather than Node's `process.stdout`/`stderr`
|
|
126
|
+
* so this transport works unmodified in a browser bundle.
|
|
127
|
+
*/
|
|
128
|
+
declare class ConsoleTransport extends Transport {
|
|
129
|
+
colorize: boolean;
|
|
130
|
+
private readonly out;
|
|
131
|
+
constructor(options?: ConsoleTransportOptions);
|
|
132
|
+
write(formatted: string, record: LogRecord): void;
|
|
133
|
+
private applyColor;
|
|
134
|
+
}
|
|
135
|
+
|
|
136
|
+
interface FileTransportOptions {
|
|
137
|
+
formatter?: Formatter;
|
|
138
|
+
maxBytes?: number;
|
|
139
|
+
backupCount?: number;
|
|
140
|
+
}
|
|
141
|
+
/** Appends formatted records to a file, rotating when it exceeds `maxBytes`. */
|
|
142
|
+
declare class FileTransport extends Transport {
|
|
143
|
+
readonly path: string;
|
|
144
|
+
readonly maxBytes: number;
|
|
145
|
+
readonly backupCount: number;
|
|
146
|
+
private fd;
|
|
147
|
+
constructor(path: string, options?: FileTransportOptions);
|
|
148
|
+
write(formatted: string): void;
|
|
149
|
+
private rotate;
|
|
150
|
+
close(): void;
|
|
151
|
+
}
|
|
152
|
+
|
|
153
|
+
/** Sends one batch of formatted lines to `url`. Swap in a fake for tests. */
|
|
154
|
+
type Sender = (url: string, batch: readonly string[]) => Promise<void> | void;
|
|
155
|
+
interface HTTPTransportOptions {
|
|
156
|
+
formatter?: Formatter;
|
|
157
|
+
batchSize?: number;
|
|
158
|
+
sender?: Sender;
|
|
159
|
+
}
|
|
160
|
+
/**
|
|
161
|
+
* Batches formatted records and POSTs them as newline-delimited JSON via `fetch`.
|
|
162
|
+
* Pass `sender` to swap in a fake for tests, or a different backend.
|
|
163
|
+
*/
|
|
164
|
+
declare class HTTPTransport extends Transport {
|
|
165
|
+
readonly url: string;
|
|
166
|
+
readonly batchSize: number;
|
|
167
|
+
private readonly sender;
|
|
168
|
+
private batch;
|
|
169
|
+
constructor(url: string, options?: HTTPTransportOptions);
|
|
170
|
+
write(formatted: string): void;
|
|
171
|
+
/** Send the current batch now, even if it hasn't reached `batchSize`. */
|
|
172
|
+
flush(): void;
|
|
173
|
+
close(): void;
|
|
174
|
+
}
|
|
175
|
+
|
|
176
|
+
interface LoggerOptions {
|
|
177
|
+
level?: LevelInput;
|
|
178
|
+
transports?: Transport[];
|
|
179
|
+
plugins?: Plugin[];
|
|
180
|
+
meta?: Record<string, unknown>;
|
|
181
|
+
}
|
|
182
|
+
declare class Logger {
|
|
183
|
+
readonly name: string;
|
|
184
|
+
readonly transports: Transport[];
|
|
185
|
+
readonly plugins: Plugin[];
|
|
186
|
+
private currentLevel;
|
|
187
|
+
private readonly baseMeta;
|
|
188
|
+
constructor(name: string, options?: LoggerOptions);
|
|
189
|
+
get level(): Level;
|
|
190
|
+
setLevel(level: LevelInput): void;
|
|
191
|
+
/** Register a plugin. Returns `this` so calls can be chained. */
|
|
192
|
+
use(plugin: Plugin): this;
|
|
193
|
+
/** Close every attached transport. Call on shutdown to flush buffered writes. */
|
|
194
|
+
close(): void;
|
|
195
|
+
/** A logger scoped under this one, inheriting its level, transports, and plugins. */
|
|
196
|
+
child(name: string, meta?: Record<string, unknown>): Logger;
|
|
197
|
+
private notifyError;
|
|
198
|
+
private dispatch;
|
|
199
|
+
trace(message: string, meta?: Record<string, unknown>): LogRecord | null;
|
|
200
|
+
debug(message: string, meta?: Record<string, unknown>): LogRecord | null;
|
|
201
|
+
info(message: string, meta?: Record<string, unknown>): LogRecord | null;
|
|
202
|
+
warn(message: string, meta?: Record<string, unknown>): LogRecord | null;
|
|
203
|
+
error(message: string, meta?: Record<string, unknown>): LogRecord | null;
|
|
204
|
+
fatal(message: string, meta?: Record<string, unknown>): LogRecord | null;
|
|
205
|
+
}
|
|
206
|
+
|
|
207
|
+
declare const VERSION = "0.1.2";
|
|
208
|
+
|
|
209
|
+
export { CollectingTransport, type ConsoleLike, ConsoleTransport, type ConsoleTransportOptions, ContextPlugin, DEFAULT_REDACTED_KEYS, FileTransport, type FileTransportOptions, type Formatter, HTTPTransport, type HTTPTransportOptions, JSONFormatter, Level, type LevelInput, type LogRecord, Logger, type LoggerOptions, type Plugin, RedactPlugin, type RedactPluginOptions, SamplingPlugin, type SamplingPluginOptions, type Sender, Transport, VERSION, createRecord, levelName, parseLevel, utcTimestamp };
|
package/dist/index.d.ts
CHANGED
|
@@ -1,3 +1,209 @@
|
|
|
1
|
-
|
|
1
|
+
/** Log levels, shared by name and numeric weight with the logquill-python contract. */
|
|
2
|
+
declare enum Level {
|
|
3
|
+
TRACE = 5,
|
|
4
|
+
DEBUG = 10,
|
|
5
|
+
INFO = 20,
|
|
6
|
+
WARN = 30,
|
|
7
|
+
ERROR = 40,
|
|
8
|
+
FATAL = 50
|
|
9
|
+
}
|
|
10
|
+
/** A level given as a `Level`, a level name (any case), or its numeric weight. */
|
|
11
|
+
type LevelInput = Level | number | string;
|
|
12
|
+
/** The level's name, e.g. `levelName(Level.INFO) === "INFO"`. */
|
|
13
|
+
declare function levelName(level: Level): string;
|
|
14
|
+
/** Normalize a level given as a `Level`, level name, or numeric weight. Throws if unknown. */
|
|
15
|
+
declare function parseLevel(level: LevelInput): Level;
|
|
2
16
|
|
|
3
|
-
|
|
17
|
+
/** The cross-language record shape shared with logquill-python. */
|
|
18
|
+
interface LogRecord {
|
|
19
|
+
timestamp: string;
|
|
20
|
+
level: string;
|
|
21
|
+
logger: string;
|
|
22
|
+
message: string;
|
|
23
|
+
meta: Record<string, unknown>;
|
|
24
|
+
}
|
|
25
|
+
/** ISO8601 UTC timestamp with millisecond precision, matching Python's `utc_timestamp()`. */
|
|
26
|
+
declare function utcTimestamp(): string;
|
|
27
|
+
declare function createRecord(params: {
|
|
28
|
+
level: Level;
|
|
29
|
+
logger: string;
|
|
30
|
+
message: string;
|
|
31
|
+
meta: Record<string, unknown>;
|
|
32
|
+
}): LogRecord;
|
|
33
|
+
|
|
34
|
+
/** `format(record) -> string`, per the transport contract shared with logquill-python. */
|
|
35
|
+
interface Formatter {
|
|
36
|
+
format(record: LogRecord): string;
|
|
37
|
+
}
|
|
38
|
+
/** Serializes a record to the canonical JSON line shape. */
|
|
39
|
+
declare class JSONFormatter implements Formatter {
|
|
40
|
+
format(record: LogRecord): string;
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
/**
|
|
44
|
+
* The plugin pipeline hooks, matching the Python hook names: `beforeLog`,
|
|
45
|
+
* `afterLog`, `onError`. All hooks are optional — implement only what you need.
|
|
46
|
+
* A hook that throws cannot crash logging: the pipeline catches it, routes it
|
|
47
|
+
* to `onError`, and moves on.
|
|
48
|
+
*/
|
|
49
|
+
interface Plugin {
|
|
50
|
+
/** Return a (possibly modified) record, or `null` to drop it. */
|
|
51
|
+
beforeLog?(record: LogRecord): LogRecord | null;
|
|
52
|
+
/** Called after the record has been dispatched to every transport. */
|
|
53
|
+
afterLog?(record: LogRecord): void;
|
|
54
|
+
/** Called when one of this plugin's own hooks throws. */
|
|
55
|
+
onError?(error: unknown, record: LogRecord): void;
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
/**
|
|
59
|
+
* Injects fixed key/value pairs into every record's `meta`.
|
|
60
|
+
* A value already present in a record's own `meta` wins over the fixed context.
|
|
61
|
+
*/
|
|
62
|
+
declare class ContextPlugin implements Plugin {
|
|
63
|
+
readonly context: Record<string, unknown>;
|
|
64
|
+
constructor(context: Record<string, unknown>);
|
|
65
|
+
beforeLog(record: LogRecord): LogRecord;
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
declare const DEFAULT_REDACTED_KEYS: readonly string[];
|
|
69
|
+
interface RedactPluginOptions {
|
|
70
|
+
keys?: readonly string[];
|
|
71
|
+
replacement?: string;
|
|
72
|
+
}
|
|
73
|
+
/** Replaces sensitive `meta` values, matched by key (case-insensitive), with a placeholder. */
|
|
74
|
+
declare class RedactPlugin implements Plugin {
|
|
75
|
+
private readonly keys;
|
|
76
|
+
readonly replacement: string;
|
|
77
|
+
constructor(options?: RedactPluginOptions);
|
|
78
|
+
beforeLog(record: LogRecord): LogRecord;
|
|
79
|
+
}
|
|
80
|
+
|
|
81
|
+
interface SamplingPluginOptions {
|
|
82
|
+
rng?: () => number;
|
|
83
|
+
}
|
|
84
|
+
/** Keeps roughly `rate` of records (0.0-1.0), dropping the rest. */
|
|
85
|
+
declare class SamplingPlugin implements Plugin {
|
|
86
|
+
readonly rate: number;
|
|
87
|
+
private readonly rng;
|
|
88
|
+
constructor(rate: number, options?: SamplingPluginOptions);
|
|
89
|
+
beforeLog(record: LogRecord): LogRecord | null;
|
|
90
|
+
}
|
|
91
|
+
|
|
92
|
+
/**
|
|
93
|
+
* Sink for log records, per the cross-language transport contract:
|
|
94
|
+
* `format(record) -> string`, `write(formatted, record)`, `close()` on shutdown.
|
|
95
|
+
*/
|
|
96
|
+
declare abstract class Transport {
|
|
97
|
+
formatter: Formatter;
|
|
98
|
+
constructor(formatter?: Formatter);
|
|
99
|
+
format(record: LogRecord): string;
|
|
100
|
+
abstract write(formatted: string, record: LogRecord): void;
|
|
101
|
+
/** Flush/release resources on shutdown. No-op unless a transport overrides it. */
|
|
102
|
+
close(): void;
|
|
103
|
+
}
|
|
104
|
+
/** In-memory transport for tests: collects every (formatted, record) pair written to it. */
|
|
105
|
+
declare class CollectingTransport extends Transport {
|
|
106
|
+
readonly formatted: string[];
|
|
107
|
+
readonly records: LogRecord[];
|
|
108
|
+
closed: boolean;
|
|
109
|
+
write(formatted: string, record: LogRecord): void;
|
|
110
|
+
close(): void;
|
|
111
|
+
}
|
|
112
|
+
|
|
113
|
+
/** The subset of `console` this transport needs — swap in a fake for tests. */
|
|
114
|
+
interface ConsoleLike {
|
|
115
|
+
log(message: string): void;
|
|
116
|
+
error(message: string): void;
|
|
117
|
+
}
|
|
118
|
+
interface ConsoleTransportOptions {
|
|
119
|
+
formatter?: Formatter;
|
|
120
|
+
colorize?: boolean;
|
|
121
|
+
console?: ConsoleLike;
|
|
122
|
+
}
|
|
123
|
+
/**
|
|
124
|
+
* Writes to `console.log`, routing ERROR/FATAL to `console.error`, colorized by
|
|
125
|
+
* level. Uses the global `console` rather than Node's `process.stdout`/`stderr`
|
|
126
|
+
* so this transport works unmodified in a browser bundle.
|
|
127
|
+
*/
|
|
128
|
+
declare class ConsoleTransport extends Transport {
|
|
129
|
+
colorize: boolean;
|
|
130
|
+
private readonly out;
|
|
131
|
+
constructor(options?: ConsoleTransportOptions);
|
|
132
|
+
write(formatted: string, record: LogRecord): void;
|
|
133
|
+
private applyColor;
|
|
134
|
+
}
|
|
135
|
+
|
|
136
|
+
interface FileTransportOptions {
|
|
137
|
+
formatter?: Formatter;
|
|
138
|
+
maxBytes?: number;
|
|
139
|
+
backupCount?: number;
|
|
140
|
+
}
|
|
141
|
+
/** Appends formatted records to a file, rotating when it exceeds `maxBytes`. */
|
|
142
|
+
declare class FileTransport extends Transport {
|
|
143
|
+
readonly path: string;
|
|
144
|
+
readonly maxBytes: number;
|
|
145
|
+
readonly backupCount: number;
|
|
146
|
+
private fd;
|
|
147
|
+
constructor(path: string, options?: FileTransportOptions);
|
|
148
|
+
write(formatted: string): void;
|
|
149
|
+
private rotate;
|
|
150
|
+
close(): void;
|
|
151
|
+
}
|
|
152
|
+
|
|
153
|
+
/** Sends one batch of formatted lines to `url`. Swap in a fake for tests. */
|
|
154
|
+
type Sender = (url: string, batch: readonly string[]) => Promise<void> | void;
|
|
155
|
+
interface HTTPTransportOptions {
|
|
156
|
+
formatter?: Formatter;
|
|
157
|
+
batchSize?: number;
|
|
158
|
+
sender?: Sender;
|
|
159
|
+
}
|
|
160
|
+
/**
|
|
161
|
+
* Batches formatted records and POSTs them as newline-delimited JSON via `fetch`.
|
|
162
|
+
* Pass `sender` to swap in a fake for tests, or a different backend.
|
|
163
|
+
*/
|
|
164
|
+
declare class HTTPTransport extends Transport {
|
|
165
|
+
readonly url: string;
|
|
166
|
+
readonly batchSize: number;
|
|
167
|
+
private readonly sender;
|
|
168
|
+
private batch;
|
|
169
|
+
constructor(url: string, options?: HTTPTransportOptions);
|
|
170
|
+
write(formatted: string): void;
|
|
171
|
+
/** Send the current batch now, even if it hasn't reached `batchSize`. */
|
|
172
|
+
flush(): void;
|
|
173
|
+
close(): void;
|
|
174
|
+
}
|
|
175
|
+
|
|
176
|
+
interface LoggerOptions {
|
|
177
|
+
level?: LevelInput;
|
|
178
|
+
transports?: Transport[];
|
|
179
|
+
plugins?: Plugin[];
|
|
180
|
+
meta?: Record<string, unknown>;
|
|
181
|
+
}
|
|
182
|
+
declare class Logger {
|
|
183
|
+
readonly name: string;
|
|
184
|
+
readonly transports: Transport[];
|
|
185
|
+
readonly plugins: Plugin[];
|
|
186
|
+
private currentLevel;
|
|
187
|
+
private readonly baseMeta;
|
|
188
|
+
constructor(name: string, options?: LoggerOptions);
|
|
189
|
+
get level(): Level;
|
|
190
|
+
setLevel(level: LevelInput): void;
|
|
191
|
+
/** Register a plugin. Returns `this` so calls can be chained. */
|
|
192
|
+
use(plugin: Plugin): this;
|
|
193
|
+
/** Close every attached transport. Call on shutdown to flush buffered writes. */
|
|
194
|
+
close(): void;
|
|
195
|
+
/** A logger scoped under this one, inheriting its level, transports, and plugins. */
|
|
196
|
+
child(name: string, meta?: Record<string, unknown>): Logger;
|
|
197
|
+
private notifyError;
|
|
198
|
+
private dispatch;
|
|
199
|
+
trace(message: string, meta?: Record<string, unknown>): LogRecord | null;
|
|
200
|
+
debug(message: string, meta?: Record<string, unknown>): LogRecord | null;
|
|
201
|
+
info(message: string, meta?: Record<string, unknown>): LogRecord | null;
|
|
202
|
+
warn(message: string, meta?: Record<string, unknown>): LogRecord | null;
|
|
203
|
+
error(message: string, meta?: Record<string, unknown>): LogRecord | null;
|
|
204
|
+
fatal(message: string, meta?: Record<string, unknown>): LogRecord | null;
|
|
205
|
+
}
|
|
206
|
+
|
|
207
|
+
declare const VERSION = "0.1.2";
|
|
208
|
+
|
|
209
|
+
export { CollectingTransport, type ConsoleLike, ConsoleTransport, type ConsoleTransportOptions, ContextPlugin, DEFAULT_REDACTED_KEYS, FileTransport, type FileTransportOptions, type Formatter, HTTPTransport, type HTTPTransportOptions, JSONFormatter, Level, type LevelInput, type LogRecord, Logger, type LoggerOptions, type Plugin, RedactPlugin, type RedactPluginOptions, SamplingPlugin, type SamplingPluginOptions, type Sender, Transport, VERSION, createRecord, levelName, parseLevel, utcTimestamp };
|