@lssm/lib.logger 1.42.0 → 1.42.1
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/LICENSE +21 -0
- package/README.md +3 -0
- package/dist/context.browser.d.mts +49 -0
- package/dist/context.browser.d.mts.map +1 -0
- package/dist/context.browser.mjs +89 -1
- package/dist/context.browser.mjs.map +1 -0
- package/dist/context.d.mts +17 -0
- package/dist/context.d.mts.map +1 -0
- package/dist/context.mjs +1 -1
- package/dist/context.node.d.mts +48 -0
- package/dist/context.node.d.mts.map +1 -0
- package/dist/context.node.mjs +79 -1
- package/dist/context.node.mjs.map +1 -0
- package/dist/elysia-plugin.d.mts +64 -0
- package/dist/elysia-plugin.d.mts.map +1 -0
- package/dist/elysia-plugin.mjs +85 -1
- package/dist/elysia-plugin.mjs.map +1 -0
- package/dist/formatters.d.mts +29 -0
- package/dist/formatters.d.mts.map +1 -0
- package/dist/formatters.mjs +180 -9
- package/dist/formatters.mjs.map +1 -0
- package/dist/index.browser.d.mts +7 -0
- package/dist/index.browser.mjs +8 -1
- package/dist/index.d.mts +8 -0
- package/dist/index.mjs +9 -1
- package/dist/logger.browser.d.mts +51 -0
- package/dist/logger.browser.d.mts.map +1 -0
- package/dist/logger.browser.mjs +190 -1
- package/dist/logger.browser.mjs.map +1 -0
- package/dist/logger.d.mts +2 -0
- package/dist/logger.mjs +3 -1
- package/dist/logger.node.d.mts +51 -0
- package/dist/logger.node.d.mts.map +1 -0
- package/dist/logger.node.mjs +190 -1
- package/dist/logger.node.mjs.map +1 -0
- package/dist/timer.d.mts +103 -0
- package/dist/timer.d.mts.map +1 -0
- package/dist/timer.mjs +165 -1
- package/dist/timer.mjs.map +1 -0
- package/dist/tracer.browser.d.mts +51 -0
- package/dist/tracer.browser.d.mts.map +1 -0
- package/dist/tracer.browser.mjs +116 -1
- package/dist/tracer.browser.mjs.map +1 -0
- package/dist/tracer.d.mts +2 -0
- package/dist/tracer.mjs +3 -1
- package/dist/tracer.node.d.mts +51 -0
- package/dist/tracer.node.d.mts.map +1 -0
- package/dist/tracer.node.mjs +116 -1
- package/dist/tracer.node.mjs.map +1 -0
- package/dist/types.d.mts +71 -0
- package/dist/types.d.mts.map +1 -0
- package/dist/types.mjs +14 -1
- package/dist/types.mjs.map +1 -0
- package/package.json +29 -22
package/dist/formatters.mjs
CHANGED
|
@@ -1,9 +1,180 @@
|
|
|
1
|
-
import{LogLevel
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
1
|
+
import { LogLevel } from "./types.mjs";
|
|
2
|
+
|
|
3
|
+
//#region src/formatters.ts
|
|
4
|
+
const colors = {
|
|
5
|
+
reset: "\x1B[0m",
|
|
6
|
+
bright: "\x1B[1m",
|
|
7
|
+
dim: "\x1B[2m",
|
|
8
|
+
red: "\x1B[31m",
|
|
9
|
+
green: "\x1B[32m",
|
|
10
|
+
yellow: "\x1B[33m",
|
|
11
|
+
blue: "\x1B[34m",
|
|
12
|
+
magenta: "\x1B[35m",
|
|
13
|
+
cyan: "\x1B[36m",
|
|
14
|
+
white: "\x1B[37m",
|
|
15
|
+
gray: "\x1B[90m",
|
|
16
|
+
bgRed: "\x1B[41m",
|
|
17
|
+
bgYellow: "\x1B[43m"
|
|
18
|
+
};
|
|
19
|
+
const levelConfig = {
|
|
20
|
+
[LogLevel.TRACE]: {
|
|
21
|
+
color: colors.gray,
|
|
22
|
+
symbol: "○",
|
|
23
|
+
name: "TRACE"
|
|
24
|
+
},
|
|
25
|
+
[LogLevel.DEBUG]: {
|
|
26
|
+
color: colors.blue,
|
|
27
|
+
symbol: "●",
|
|
28
|
+
name: "DEBUG"
|
|
29
|
+
},
|
|
30
|
+
[LogLevel.INFO]: {
|
|
31
|
+
color: colors.green,
|
|
32
|
+
symbol: "●",
|
|
33
|
+
name: "INFO "
|
|
34
|
+
},
|
|
35
|
+
[LogLevel.WARN]: {
|
|
36
|
+
color: colors.yellow,
|
|
37
|
+
symbol: "▲",
|
|
38
|
+
name: "WARN "
|
|
39
|
+
},
|
|
40
|
+
[LogLevel.ERROR]: {
|
|
41
|
+
color: colors.red,
|
|
42
|
+
symbol: "✖",
|
|
43
|
+
name: "ERROR"
|
|
44
|
+
},
|
|
45
|
+
[LogLevel.FATAL]: {
|
|
46
|
+
color: colors.bgRed + colors.white,
|
|
47
|
+
symbol: "💀",
|
|
48
|
+
name: "FATAL"
|
|
49
|
+
}
|
|
50
|
+
};
|
|
51
|
+
var DevFormatter = class {
|
|
52
|
+
enableColors;
|
|
53
|
+
constructor(enableColors = true) {
|
|
54
|
+
this.enableColors = enableColors;
|
|
55
|
+
}
|
|
56
|
+
format(entry) {
|
|
57
|
+
const parts = [];
|
|
58
|
+
const config = levelConfig[entry.level];
|
|
59
|
+
const timestamp = this.formatTimestamp(entry.timestamp);
|
|
60
|
+
parts.push(this.colorize(timestamp, colors.gray));
|
|
61
|
+
const levelText = `${config.symbol} ${config.name}`;
|
|
62
|
+
parts.push(this.colorize(levelText, config.color));
|
|
63
|
+
if (entry.traceId) {
|
|
64
|
+
const traceInfo = this.formatTraceInfo(entry);
|
|
65
|
+
parts.push(this.colorize(traceInfo, colors.cyan));
|
|
66
|
+
}
|
|
67
|
+
parts.push(this.colorize(entry.message, colors.white));
|
|
68
|
+
if (entry.duration !== void 0) {
|
|
69
|
+
const durationText = `(${this.formatDuration(entry.duration)})`;
|
|
70
|
+
parts.push(this.colorize(durationText, colors.magenta));
|
|
71
|
+
}
|
|
72
|
+
let output = parts.join(" ");
|
|
73
|
+
if (entry.context && Object.keys(entry.context).length > 0) output += "\n" + this.formatContext(entry.context);
|
|
74
|
+
if (entry.metadata && Object.keys(entry.metadata).length > 0) output += "\n" + this.formatMetadata(entry.metadata);
|
|
75
|
+
if (entry.error) output += "\n" + this.formatError(entry.error);
|
|
76
|
+
if (entry.tags && entry.tags.length > 0) {
|
|
77
|
+
const tagsText = entry.tags.map((tag) => `#${tag}`).join(" ");
|
|
78
|
+
output += "\n" + this.colorize(`Tags: ${tagsText}`, colors.blue);
|
|
79
|
+
}
|
|
80
|
+
return output;
|
|
81
|
+
}
|
|
82
|
+
formatTimestamp(timestamp) {
|
|
83
|
+
return timestamp.toISOString().substring(11, 23);
|
|
84
|
+
}
|
|
85
|
+
formatTraceInfo(entry) {
|
|
86
|
+
const parts = [`trace:${entry.traceId?.substring(0, 8) || "unknown"}`];
|
|
87
|
+
if (entry.spanId && entry.spanId.length >= 8) parts.push(`span:${entry.spanId.substring(0, 8)}`);
|
|
88
|
+
if (entry.parentId && entry.parentId.length >= 8) parts.push(`parent:${entry.parentId.substring(0, 8)}`);
|
|
89
|
+
return `[${parts.join("|")}]`;
|
|
90
|
+
}
|
|
91
|
+
formatDuration(duration) {
|
|
92
|
+
if (duration < 1) return `${(duration * 1e3).toFixed(0)}μs`;
|
|
93
|
+
else if (duration < 1e3) return `${duration.toFixed(2)}ms`;
|
|
94
|
+
else return `${(duration / 1e3).toFixed(2)}s`;
|
|
95
|
+
}
|
|
96
|
+
formatContext(context) {
|
|
97
|
+
const formatted = this.formatObject(context, 2);
|
|
98
|
+
return this.colorize(`Context: ${formatted}`, colors.cyan);
|
|
99
|
+
}
|
|
100
|
+
formatMetadata(metadata) {
|
|
101
|
+
const formatted = this.formatObject(metadata, 2);
|
|
102
|
+
return this.colorize(`Metadata: ${formatted}`, colors.blue);
|
|
103
|
+
}
|
|
104
|
+
formatError(error) {
|
|
105
|
+
let output = this.colorize(`Error: ${error.name}: ${error.message}`, colors.red);
|
|
106
|
+
if (error.stack) {
|
|
107
|
+
const indentedStack = error.stack.split("\n").slice(1, 6).map((line) => ` ${line}`).join("\n");
|
|
108
|
+
output += "\n" + this.colorize(indentedStack, colors.gray);
|
|
109
|
+
}
|
|
110
|
+
return output;
|
|
111
|
+
}
|
|
112
|
+
formatObject(obj, indent = 0) {
|
|
113
|
+
const spaces = " ".repeat(indent);
|
|
114
|
+
const entries = Object.entries(obj);
|
|
115
|
+
if (entries.length === 0) return "{}";
|
|
116
|
+
if (entries[0] && typeof entries[0][1] !== "object") return `{ ${entries[0][0]}: ${this.formatValue(entries[0][1])} }`;
|
|
117
|
+
return `{\n${entries.map(([key, value]) => {
|
|
118
|
+
return `${spaces} ${key}: ${this.formatValue(value, indent + 2)}`;
|
|
119
|
+
}).join("\n")}\n${spaces}}`;
|
|
120
|
+
}
|
|
121
|
+
formatValue(value, indent = 0) {
|
|
122
|
+
if (value === null) return "null";
|
|
123
|
+
if (value === void 0) return "undefined";
|
|
124
|
+
if (typeof value === "string") return `"${value}"`;
|
|
125
|
+
if (typeof value === "boolean" || typeof value === "number") return String(value);
|
|
126
|
+
if (value instanceof Date) return value.toISOString();
|
|
127
|
+
if (Array.isArray(value)) {
|
|
128
|
+
if (value.length === 0) return "[]";
|
|
129
|
+
return `[${value.map((v) => this.formatValue(v)).join(", ")}]`;
|
|
130
|
+
}
|
|
131
|
+
if (typeof value === "object") return this.formatObject(value, indent);
|
|
132
|
+
return String(value);
|
|
133
|
+
}
|
|
134
|
+
colorize(text, color) {
|
|
135
|
+
if (!this.enableColors) return text;
|
|
136
|
+
return `${color}${text}${colors.reset}`;
|
|
137
|
+
}
|
|
138
|
+
};
|
|
139
|
+
var ProductionFormatter = class {
|
|
140
|
+
format(entry) {
|
|
141
|
+
const logObject = {
|
|
142
|
+
timestamp: entry.timestamp,
|
|
143
|
+
level: entry.level,
|
|
144
|
+
message: entry.message
|
|
145
|
+
};
|
|
146
|
+
if (entry.traceId) logObject.traceId = entry.traceId;
|
|
147
|
+
if (entry.spanId) logObject.spanId = entry.spanId;
|
|
148
|
+
if (entry.parentId) logObject.parentId = entry.parentId;
|
|
149
|
+
if (entry.duration !== void 0) logObject.duration = entry.duration;
|
|
150
|
+
if (entry.context && Object.keys(entry.context).length > 0) logObject.context = entry.context;
|
|
151
|
+
if (entry.metadata && Object.keys(entry.metadata).length > 0) logObject.metadata = entry.metadata;
|
|
152
|
+
if (entry.error) logObject.error = {
|
|
153
|
+
name: entry.error.name,
|
|
154
|
+
message: entry.error.message,
|
|
155
|
+
stack: entry.error.stack
|
|
156
|
+
};
|
|
157
|
+
if (entry.tags && entry.tags.length > 0) logObject.tags = entry.tags;
|
|
158
|
+
return JSON.stringify(logObject);
|
|
159
|
+
}
|
|
160
|
+
};
|
|
161
|
+
var CustomFormatter = class {
|
|
162
|
+
template;
|
|
163
|
+
dateFormat;
|
|
164
|
+
constructor(template = "{timestamp} [{level}] {message}", dateFormat) {
|
|
165
|
+
this.template = template;
|
|
166
|
+
this.dateFormat = dateFormat || ((date) => date.toISOString());
|
|
167
|
+
}
|
|
168
|
+
format(entry) {
|
|
169
|
+
const levelName = LogLevel[entry.level];
|
|
170
|
+
const timestamp = this.dateFormat(entry.timestamp);
|
|
171
|
+
let formatted = this.template.replace("{timestamp}", timestamp).replace("{level}", levelName).replace("{message}", entry.message).replace("{traceId}", entry.traceId || "").replace("{spanId}", entry.spanId || "").replace("{duration}", entry.duration?.toString() || "");
|
|
172
|
+
if (entry.context) formatted = formatted.replace("{context}", JSON.stringify(entry.context));
|
|
173
|
+
if (entry.metadata) formatted = formatted.replace("{metadata}", JSON.stringify(entry.metadata));
|
|
174
|
+
return formatted;
|
|
175
|
+
}
|
|
176
|
+
};
|
|
177
|
+
|
|
178
|
+
//#endregion
|
|
179
|
+
export { CustomFormatter, DevFormatter, ProductionFormatter };
|
|
180
|
+
//# sourceMappingURL=formatters.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"formatters.mjs","names":["parts: string[]","logObject: LogEntry"],"sources":["../src/formatters.ts"],"sourcesContent":["import type { Formatter, LogEntry } from './types';\nimport { LogLevel } from './types';\n\n// ANSI color codes for terminal output\nconst colors = {\n reset: '\\x1b[0m',\n bright: '\\x1b[1m',\n dim: '\\x1b[2m',\n red: '\\x1b[31m',\n green: '\\x1b[32m',\n yellow: '\\x1b[33m',\n blue: '\\x1b[34m',\n magenta: '\\x1b[35m',\n cyan: '\\x1b[36m',\n white: '\\x1b[37m',\n gray: '\\x1b[90m',\n bgRed: '\\x1b[41m',\n bgYellow: '\\x1b[43m',\n};\n\n// Log level colors and symbols\nconst levelConfig = {\n [LogLevel.TRACE]: { color: colors.gray, symbol: '○', name: 'TRACE' },\n [LogLevel.DEBUG]: { color: colors.blue, symbol: '●', name: 'DEBUG' },\n [LogLevel.INFO]: { color: colors.green, symbol: '●', name: 'INFO ' },\n [LogLevel.WARN]: { color: colors.yellow, symbol: '▲', name: 'WARN ' },\n [LogLevel.ERROR]: { color: colors.red, symbol: '✖', name: 'ERROR' },\n [LogLevel.FATAL]: {\n color: colors.bgRed + colors.white,\n symbol: '💀',\n name: 'FATAL',\n },\n};\n\nexport class DevFormatter implements Formatter {\n private enableColors: boolean;\n\n constructor(enableColors = true) {\n this.enableColors = enableColors;\n }\n\n format(entry: LogEntry): string {\n const parts: string[] = [];\n const config = levelConfig[entry.level];\n\n // Timestamp\n const timestamp = this.formatTimestamp(entry.timestamp);\n parts.push(this.colorize(timestamp, colors.gray));\n\n // Log level with symbol\n const levelText = `${config.symbol} ${config.name}`;\n parts.push(this.colorize(levelText, config.color));\n\n // Trace information\n if (entry.traceId) {\n const traceInfo = this.formatTraceInfo(entry);\n parts.push(this.colorize(traceInfo, colors.cyan));\n }\n\n // Main message\n parts.push(this.colorize(entry.message, colors.white));\n\n // Duration (if present)\n if (entry.duration !== undefined) {\n const durationText = `(${this.formatDuration(entry.duration)})`;\n parts.push(this.colorize(durationText, colors.magenta));\n }\n\n let output = parts.join(' ');\n\n // Context and metadata (on new lines for readability)\n if (entry.context && Object.keys(entry.context).length > 0) {\n output += '\\n' + this.formatContext(entry.context);\n }\n\n if (entry.metadata && Object.keys(entry.metadata).length > 0) {\n output += '\\n' + this.formatMetadata(entry.metadata);\n }\n\n // Error details\n if (entry.error) {\n output += '\\n' + this.formatError(entry.error);\n }\n\n // Tags\n if (entry.tags && entry.tags.length > 0) {\n const tagsText = entry.tags.map((tag) => `#${tag}`).join(' ');\n output += '\\n' + this.colorize(`Tags: ${tagsText}`, colors.blue);\n }\n\n return output;\n }\n\n private formatTimestamp(timestamp: Date): string {\n return timestamp.toISOString().substring(11, 23); // Just time with milliseconds\n }\n\n private formatTraceInfo(entry: LogEntry): string {\n const parts = [`trace:${entry.traceId?.substring(0, 8) || 'unknown'}`];\n if (entry.spanId && entry.spanId.length >= 8) {\n parts.push(`span:${entry.spanId.substring(0, 8)}`);\n }\n if (entry.parentId && entry.parentId.length >= 8) {\n parts.push(`parent:${entry.parentId.substring(0, 8)}`);\n }\n return `[${parts.join('|')}]`;\n }\n\n private formatDuration(duration: number): string {\n if (duration < 1) {\n return `${(duration * 1000).toFixed(0)}μs`;\n } else if (duration < 1000) {\n return `${duration.toFixed(2)}ms`;\n } else {\n return `${(duration / 1000).toFixed(2)}s`;\n }\n }\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n private formatContext(context: Record<string, any>): string {\n const formatted = this.formatObject(context, 2);\n return this.colorize(`Context: ${formatted}`, colors.cyan);\n }\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n private formatMetadata(metadata: Record<string, any>): string {\n const formatted = this.formatObject(metadata, 2);\n return this.colorize(`Metadata: ${formatted}`, colors.blue);\n }\n\n private formatError(error: Error): string {\n let output = this.colorize(\n `Error: ${error.name}: ${error.message}`,\n colors.red\n );\n if (error.stack) {\n const stackLines = error.stack.split('\\n').slice(1, 6); // First 5 stack frames\n const indentedStack = stackLines.map((line) => ` ${line}`).join('\\n');\n output += '\\n' + this.colorize(indentedStack, colors.gray);\n }\n return output;\n }\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n private formatObject(obj: Record<string, any>, indent = 0): string {\n const spaces = ' '.repeat(indent);\n const entries = Object.entries(obj);\n\n if (entries.length === 0) return '{}';\n\n if (entries[0] && typeof entries[0][1] !== 'object') {\n return `{ ${entries[0][0]}: ${this.formatValue(entries[0][1])} }`;\n }\n\n const formatted = entries\n .map(([key, value]) => {\n return `${spaces} ${key}: ${this.formatValue(value, indent + 2)}`;\n })\n .join('\\n');\n\n return `{\\n${formatted}\\n${spaces}}`;\n }\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n private formatValue(value: any, indent = 0): string {\n if (value === null) return 'null';\n if (value === undefined) return 'undefined';\n if (typeof value === 'string') return `\"${value}\"`;\n if (typeof value === 'boolean' || typeof value === 'number')\n return String(value);\n if (value instanceof Date) return value.toISOString();\n if (Array.isArray(value)) {\n if (value.length === 0) return '[]';\n return `[${value.map((v) => this.formatValue(v)).join(', ')}]`;\n }\n if (typeof value === 'object') {\n return this.formatObject(value, indent);\n }\n return String(value);\n }\n\n private colorize(text: string, color: string): string {\n if (!this.enableColors) return text;\n return `${color}${text}${colors.reset}`;\n }\n}\n\nexport class ProductionFormatter implements Formatter {\n format(entry: LogEntry): string {\n const logObject: LogEntry = {\n timestamp: entry.timestamp,\n level: entry.level,\n message: entry.message,\n };\n\n // Add trace information\n if (entry.traceId) {\n logObject.traceId = entry.traceId;\n }\n if (entry.spanId) {\n logObject.spanId = entry.spanId;\n }\n if (entry.parentId) {\n logObject.parentId = entry.parentId;\n }\n\n // Add timing information\n if (entry.duration !== undefined) {\n logObject.duration = entry.duration;\n }\n\n // Add context and metadata\n if (entry.context && Object.keys(entry.context).length > 0) {\n logObject.context = entry.context;\n }\n if (entry.metadata && Object.keys(entry.metadata).length > 0) {\n logObject.metadata = entry.metadata;\n }\n\n // Add error information\n if (entry.error) {\n logObject.error = {\n name: entry.error.name,\n message: entry.error.message,\n stack: entry.error.stack,\n };\n }\n\n // Add tags\n if (entry.tags && entry.tags.length > 0) {\n logObject.tags = entry.tags;\n }\n\n return JSON.stringify(logObject);\n }\n}\n\nexport class CustomFormatter implements Formatter {\n private template: string;\n private dateFormat: (date: Date) => string;\n\n constructor(\n template = '{timestamp} [{level}] {message}',\n dateFormat?: (date: Date) => string\n ) {\n this.template = template;\n this.dateFormat = dateFormat || ((date: Date) => date.toISOString());\n }\n\n format(entry: LogEntry): string {\n const levelName = LogLevel[entry.level];\n const timestamp = this.dateFormat(entry.timestamp);\n\n let formatted = this.template\n .replace('{timestamp}', timestamp)\n .replace('{level}', levelName)\n .replace('{message}', entry.message)\n .replace('{traceId}', entry.traceId || '')\n .replace('{spanId}', entry.spanId || '')\n .replace('{duration}', entry.duration?.toString() || '');\n\n // Handle context and metadata placeholders\n if (entry.context) {\n formatted = formatted.replace('{context}', JSON.stringify(entry.context));\n }\n if (entry.metadata) {\n formatted = formatted.replace(\n '{metadata}',\n JSON.stringify(entry.metadata)\n );\n }\n\n return formatted;\n }\n}\n"],"mappings":"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"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import { LogEntry, LogLevel, TraceContext, TracingOptions } from "./types.mjs";
|
|
2
|
+
import { LogContext } from "./context.browser.mjs";
|
|
3
|
+
import { Timer } from "./timer.mjs";
|
|
4
|
+
import { DevFormatter, ProductionFormatter } from "./formatters.mjs";
|
|
5
|
+
import { Logger } from "./logger.browser.mjs";
|
|
6
|
+
import { Tracer } from "./tracer.browser.mjs";
|
|
7
|
+
export { DevFormatter, LogContext, type LogEntry, LogLevel, Logger, ProductionFormatter, Timer, type TraceContext, Tracer, type TracingOptions };
|
package/dist/index.browser.mjs
CHANGED
|
@@ -1 +1,8 @@
|
|
|
1
|
-
import
|
|
1
|
+
import { LogContext } from "./context.browser.mjs";
|
|
2
|
+
import { LogLevel } from "./types.mjs";
|
|
3
|
+
import { Timer } from "./timer.mjs";
|
|
4
|
+
import { DevFormatter, ProductionFormatter } from "./formatters.mjs";
|
|
5
|
+
import { Tracer } from "./tracer.browser.mjs";
|
|
6
|
+
import { Logger } from "./logger.browser.mjs";
|
|
7
|
+
|
|
8
|
+
export { DevFormatter, LogContext, LogLevel, Logger, ProductionFormatter, Timer, Tracer };
|
package/dist/index.d.mts
ADDED
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import { LogEntry, LogLevel, TraceContext, TracingOptions } from "./types.mjs";
|
|
2
|
+
import { LogContext } from "./context.node.mjs";
|
|
3
|
+
import { Timer } from "./timer.mjs";
|
|
4
|
+
import { Logger } from "./logger.node.mjs";
|
|
5
|
+
import { createElysiaLogger, elysiaLogger } from "./elysia-plugin.mjs";
|
|
6
|
+
import { DevFormatter, ProductionFormatter } from "./formatters.mjs";
|
|
7
|
+
import { Tracer } from "./tracer.node.mjs";
|
|
8
|
+
export { DevFormatter, LogContext, type LogEntry, LogLevel, Logger, ProductionFormatter, Timer, type TraceContext, Tracer, type TracingOptions, createElysiaLogger, elysiaLogger };
|
package/dist/index.mjs
CHANGED
|
@@ -1 +1,9 @@
|
|
|
1
|
-
import
|
|
1
|
+
import { LogContext } from "./context.node.mjs";
|
|
2
|
+
import { LogLevel } from "./types.mjs";
|
|
3
|
+
import { Timer } from "./timer.mjs";
|
|
4
|
+
import { Tracer } from "./tracer.node.mjs";
|
|
5
|
+
import { DevFormatter, ProductionFormatter } from "./formatters.mjs";
|
|
6
|
+
import { Logger } from "./logger.node.mjs";
|
|
7
|
+
import { createElysiaLogger, elysiaLogger } from "./elysia-plugin.mjs";
|
|
8
|
+
|
|
9
|
+
export { DevFormatter, LogContext, LogLevel, Logger, ProductionFormatter, Timer, Tracer, createElysiaLogger, elysiaLogger };
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
import { ContextData, Formatter, LogLevel, LoggerConfig, TraceContext, TraceMethod, TracingOptions } from "./types.mjs";
|
|
2
|
+
import { Timer } from "./timer.mjs";
|
|
3
|
+
|
|
4
|
+
//#region src/logger.browser.d.ts
|
|
5
|
+
declare class Logger {
|
|
6
|
+
private config;
|
|
7
|
+
private formatter;
|
|
8
|
+
private context;
|
|
9
|
+
private tracer;
|
|
10
|
+
private timerManager;
|
|
11
|
+
constructor(config?: Partial<LoggerConfig>);
|
|
12
|
+
traceLog(message: string, metadata?: Record<string, unknown>): void;
|
|
13
|
+
debug(message: string, metadata?: Record<string, unknown>): void;
|
|
14
|
+
info(message: string, metadata?: Record<string, unknown>): void;
|
|
15
|
+
warn(message: string, metadata?: Record<string, unknown>): void;
|
|
16
|
+
error(message: string, metadata?: Record<string, unknown>, error?: Error): void;
|
|
17
|
+
fatal(message: string, metadata?: Record<string, unknown>, error?: Error): void;
|
|
18
|
+
withContext<T>(context: ContextData, fn: () => T): T;
|
|
19
|
+
extendContext<T>(additionalContext: Partial<ContextData>, fn: () => T): T;
|
|
20
|
+
setContext(key: string, value: unknown): void;
|
|
21
|
+
getContext(): ContextData;
|
|
22
|
+
trace: TraceMethod;
|
|
23
|
+
getTraceId(): string | undefined;
|
|
24
|
+
startSpan(options: TracingOptions): TraceContext | null;
|
|
25
|
+
finishSpan(spanId: string): number | undefined;
|
|
26
|
+
addTraceMetadata(key: string, value: unknown): void;
|
|
27
|
+
addTraceTags(...tags: string[]): void;
|
|
28
|
+
startTimer(id?: string): Timer | null;
|
|
29
|
+
stopTimer(id: string): number | undefined;
|
|
30
|
+
getTimer(id: string): Timer | undefined;
|
|
31
|
+
child(context: Partial<ContextData>): Logger;
|
|
32
|
+
setLevel(level: LogLevel): void;
|
|
33
|
+
setFormatter(formatter: Formatter): void;
|
|
34
|
+
profile<T>(operationName: string, fn: () => T | Promise<T>, options?: {
|
|
35
|
+
logResult?: boolean;
|
|
36
|
+
logLevel?: LogLevel;
|
|
37
|
+
}): Promise<T>;
|
|
38
|
+
logRequest(method: string, url: string, statusCode?: number, duration?: number): void;
|
|
39
|
+
flush(): Promise<void>;
|
|
40
|
+
getStats(): {
|
|
41
|
+
activeTimers: number;
|
|
42
|
+
activeSpans: number;
|
|
43
|
+
config: LoggerConfig;
|
|
44
|
+
};
|
|
45
|
+
protected output(message: string, level: LogLevel): void;
|
|
46
|
+
private log;
|
|
47
|
+
private getHttpLogLevel;
|
|
48
|
+
}
|
|
49
|
+
//#endregion
|
|
50
|
+
export { Logger };
|
|
51
|
+
//# sourceMappingURL=logger.browser.d.mts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"logger.browser.d.mts","names":[],"sources":["../src/logger.browser.ts"],"sourcesContent":[],"mappings":"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"}
|
package/dist/logger.browser.mjs
CHANGED
|
@@ -1 +1,190 @@
|
|
|
1
|
-
import
|
|
1
|
+
import { LogContext } from "./context.browser.mjs";
|
|
2
|
+
import { LogLevel } from "./types.mjs";
|
|
3
|
+
import { TimerManager } from "./timer.mjs";
|
|
4
|
+
import { DevFormatter, ProductionFormatter } from "./formatters.mjs";
|
|
5
|
+
import { Tracer } from "./tracer.browser.mjs";
|
|
6
|
+
|
|
7
|
+
//#region src/logger.browser.ts
|
|
8
|
+
var Logger = class Logger {
|
|
9
|
+
config;
|
|
10
|
+
formatter;
|
|
11
|
+
context;
|
|
12
|
+
tracer;
|
|
13
|
+
timerManager;
|
|
14
|
+
constructor(config) {
|
|
15
|
+
this.config = {
|
|
16
|
+
level: LogLevel.INFO,
|
|
17
|
+
environment: process.env.NODE_ENV || "development",
|
|
18
|
+
enableTracing: true,
|
|
19
|
+
enableTiming: true,
|
|
20
|
+
enableContext: true,
|
|
21
|
+
enableColors: true,
|
|
22
|
+
maxContextDepth: 10,
|
|
23
|
+
timestampFormat: "iso",
|
|
24
|
+
...config
|
|
25
|
+
};
|
|
26
|
+
this.context = LogContext.getInstance();
|
|
27
|
+
this.tracer = new Tracer();
|
|
28
|
+
this.timerManager = new TimerManager();
|
|
29
|
+
this.formatter = this.config.environment === "production" ? new ProductionFormatter() : new DevFormatter(this.config.enableColors);
|
|
30
|
+
}
|
|
31
|
+
traceLog(message, metadata) {
|
|
32
|
+
this.log(LogLevel.TRACE, message, metadata);
|
|
33
|
+
}
|
|
34
|
+
debug(message, metadata) {
|
|
35
|
+
this.log(LogLevel.DEBUG, message, metadata);
|
|
36
|
+
}
|
|
37
|
+
info(message, metadata) {
|
|
38
|
+
this.log(LogLevel.INFO, message, metadata);
|
|
39
|
+
}
|
|
40
|
+
warn(message, metadata) {
|
|
41
|
+
this.log(LogLevel.WARN, message, metadata);
|
|
42
|
+
}
|
|
43
|
+
error(message, metadata, error) {
|
|
44
|
+
this.log(LogLevel.ERROR, message, metadata, error);
|
|
45
|
+
}
|
|
46
|
+
fatal(message, metadata, error) {
|
|
47
|
+
this.log(LogLevel.FATAL, message, metadata, error);
|
|
48
|
+
}
|
|
49
|
+
withContext(context, fn) {
|
|
50
|
+
return this.context.run(context, fn);
|
|
51
|
+
}
|
|
52
|
+
extendContext(additionalContext, fn) {
|
|
53
|
+
return this.context.extend(additionalContext, fn);
|
|
54
|
+
}
|
|
55
|
+
setContext(key, value) {
|
|
56
|
+
this.context.set(key, value);
|
|
57
|
+
}
|
|
58
|
+
getContext() {
|
|
59
|
+
return this.context.getContext();
|
|
60
|
+
}
|
|
61
|
+
trace = async (options, fn) => {
|
|
62
|
+
if (!this.config.enableTracing) return await fn();
|
|
63
|
+
return this.tracer.trace(options, fn);
|
|
64
|
+
};
|
|
65
|
+
getTraceId() {
|
|
66
|
+
return this.tracer.getCurrentTrace()?.traceId;
|
|
67
|
+
}
|
|
68
|
+
startSpan(options) {
|
|
69
|
+
if (!this.config.enableTracing) return null;
|
|
70
|
+
return this.tracer.startSpan(options);
|
|
71
|
+
}
|
|
72
|
+
finishSpan(spanId) {
|
|
73
|
+
if (!this.config.enableTracing) return;
|
|
74
|
+
return this.tracer.finishSpan(spanId);
|
|
75
|
+
}
|
|
76
|
+
addTraceMetadata(key, value) {
|
|
77
|
+
if (this.config.enableTracing) this.tracer.addMetadata(key, value);
|
|
78
|
+
}
|
|
79
|
+
addTraceTags(...tags) {
|
|
80
|
+
if (this.config.enableTracing) this.tracer.addTags(...tags);
|
|
81
|
+
}
|
|
82
|
+
startTimer(id) {
|
|
83
|
+
if (!this.config.enableTiming) return null;
|
|
84
|
+
return this.timerManager.start(id);
|
|
85
|
+
}
|
|
86
|
+
stopTimer(id) {
|
|
87
|
+
if (!this.config.enableTiming) return;
|
|
88
|
+
return this.timerManager.stop(id);
|
|
89
|
+
}
|
|
90
|
+
getTimer(id) {
|
|
91
|
+
return this.timerManager.get(id);
|
|
92
|
+
}
|
|
93
|
+
child(context) {
|
|
94
|
+
const childLogger = new Logger(this.config);
|
|
95
|
+
Object.entries(context).forEach(([key, value]) => {
|
|
96
|
+
childLogger.setContext(key, value);
|
|
97
|
+
});
|
|
98
|
+
return childLogger;
|
|
99
|
+
}
|
|
100
|
+
setLevel(level) {
|
|
101
|
+
this.config.level = level;
|
|
102
|
+
}
|
|
103
|
+
setFormatter(formatter) {
|
|
104
|
+
this.formatter = formatter;
|
|
105
|
+
}
|
|
106
|
+
async profile(operationName, fn, options) {
|
|
107
|
+
const timer = this.startTimer(`profile-${operationName}`);
|
|
108
|
+
const startTime = performance.now();
|
|
109
|
+
try {
|
|
110
|
+
const result = await this.tracer.trace({
|
|
111
|
+
operationType: "custom",
|
|
112
|
+
operationName: `profile:${operationName}`,
|
|
113
|
+
autoTiming: true
|
|
114
|
+
}, fn);
|
|
115
|
+
const duration = performance.now() - startTime;
|
|
116
|
+
timer?.stop();
|
|
117
|
+
const logLevel = options?.logLevel || LogLevel.DEBUG;
|
|
118
|
+
this.log(logLevel, `Profile: ${operationName} completed`, {
|
|
119
|
+
operation: operationName,
|
|
120
|
+
duration: `${duration.toFixed(2)}ms`,
|
|
121
|
+
result: options?.logResult ? result : "[result hidden]"
|
|
122
|
+
});
|
|
123
|
+
return result;
|
|
124
|
+
} catch (error) {
|
|
125
|
+
const duration = performance.now() - startTime;
|
|
126
|
+
timer?.stop();
|
|
127
|
+
this.error(`Profile: ${operationName} failed`, {
|
|
128
|
+
operation: operationName,
|
|
129
|
+
duration: `${duration.toFixed(2)}ms`,
|
|
130
|
+
error: error.message
|
|
131
|
+
}, error);
|
|
132
|
+
throw error;
|
|
133
|
+
}
|
|
134
|
+
}
|
|
135
|
+
logRequest(method, url, statusCode, duration) {
|
|
136
|
+
const level = this.getHttpLogLevel(statusCode);
|
|
137
|
+
const message = `${method.toUpperCase()} ${url}${statusCode ? ` ${statusCode}` : ""}`;
|
|
138
|
+
this.log(level, message, {
|
|
139
|
+
method,
|
|
140
|
+
url,
|
|
141
|
+
statusCode,
|
|
142
|
+
duration: duration ? `${duration.toFixed(2)}ms` : void 0,
|
|
143
|
+
type: "http_request"
|
|
144
|
+
});
|
|
145
|
+
}
|
|
146
|
+
async flush() {
|
|
147
|
+
this.timerManager.clear();
|
|
148
|
+
}
|
|
149
|
+
getStats() {
|
|
150
|
+
return {
|
|
151
|
+
activeTimers: this.timerManager.getActive().length,
|
|
152
|
+
activeSpans: this.tracer.getActiveSpans().length,
|
|
153
|
+
config: { ...this.config }
|
|
154
|
+
};
|
|
155
|
+
}
|
|
156
|
+
output(message, level) {
|
|
157
|
+
if (level >= LogLevel.ERROR) console.error(message);
|
|
158
|
+
else console.log(message);
|
|
159
|
+
}
|
|
160
|
+
log(level, message, metadata, error) {
|
|
161
|
+
if (level < this.config.level) return;
|
|
162
|
+
const currentTrace = this.config.enableTracing ? this.tracer.getCurrentTrace() : void 0;
|
|
163
|
+
const contextData = this.config.enableContext ? this.context.getContext() : void 0;
|
|
164
|
+
const entry = {
|
|
165
|
+
level,
|
|
166
|
+
message,
|
|
167
|
+
timestamp: /* @__PURE__ */ new Date(),
|
|
168
|
+
traceId: currentTrace?.traceId,
|
|
169
|
+
parentId: currentTrace?.parentId,
|
|
170
|
+
spanId: currentTrace?.spanId,
|
|
171
|
+
context: contextData,
|
|
172
|
+
metadata,
|
|
173
|
+
error,
|
|
174
|
+
tags: currentTrace?.tags
|
|
175
|
+
};
|
|
176
|
+
if (currentTrace?.metadata?.duration) entry.duration = currentTrace.metadata.duration;
|
|
177
|
+
const formatted = this.formatter.format(entry);
|
|
178
|
+
this.output(formatted, level);
|
|
179
|
+
}
|
|
180
|
+
getHttpLogLevel(statusCode) {
|
|
181
|
+
if (!statusCode) return LogLevel.INFO;
|
|
182
|
+
if (statusCode >= 500) return LogLevel.ERROR;
|
|
183
|
+
if (statusCode >= 400) return LogLevel.WARN;
|
|
184
|
+
return LogLevel.INFO;
|
|
185
|
+
}
|
|
186
|
+
};
|
|
187
|
+
|
|
188
|
+
//#endregion
|
|
189
|
+
export { Logger };
|
|
190
|
+
//# sourceMappingURL=logger.browser.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"logger.browser.mjs","names":["entry: LogEntry"],"sources":["../src/logger.browser.ts"],"sourcesContent":["import type {\n ContextData,\n Formatter,\n LogEntry,\n LoggerConfig,\n TraceMethod,\n TracingOptions,\n} from './types';\nimport { LogLevel } from './types';\nimport { LogContext } from './context.browser';\nimport { Tracer } from './tracer.browser';\nimport { Timer, TimerManager } from './timer';\nimport { DevFormatter, ProductionFormatter } from './formatters';\n\nexport class Logger {\n private config: LoggerConfig;\n private formatter: Formatter;\n private context: LogContext;\n private tracer: Tracer;\n private timerManager: TimerManager;\n\n constructor(config?: Partial<LoggerConfig>) {\n this.config = {\n level: LogLevel.INFO,\n environment:\n (process.env.NODE_ENV as LoggerConfig['environment']) || 'development',\n enableTracing: true,\n enableTiming: true,\n enableContext: true,\n enableColors: true,\n maxContextDepth: 10,\n timestampFormat: 'iso',\n ...config,\n };\n\n this.context = LogContext.getInstance();\n this.tracer = new Tracer();\n this.timerManager = new TimerManager();\n\n // Set up formatter based on environment\n this.formatter =\n this.config.environment === 'production'\n ? new ProductionFormatter()\n : new DevFormatter(this.config.enableColors);\n }\n\n // Core logging methods\n traceLog(message: string, metadata?: Record<string, unknown>): void {\n this.log(LogLevel.TRACE, message, metadata);\n }\n\n debug(message: string, metadata?: Record<string, unknown>): void {\n this.log(LogLevel.DEBUG, message, metadata);\n }\n\n info(message: string, metadata?: Record<string, unknown>): void {\n this.log(LogLevel.INFO, message, metadata);\n }\n\n warn(message: string, metadata?: Record<string, unknown>): void {\n this.log(LogLevel.WARN, message, metadata);\n }\n\n error(\n message: string,\n metadata?: Record<string, unknown>,\n error?: Error\n ): void {\n this.log(LogLevel.ERROR, message, metadata, error);\n }\n\n fatal(\n message: string,\n metadata?: Record<string, unknown>,\n error?: Error\n ): void {\n this.log(LogLevel.FATAL, message, metadata, error);\n }\n\n // Context management\n withContext<T>(context: ContextData, fn: () => T): T {\n return this.context.run(context, fn);\n }\n\n extendContext<T>(additionalContext: Partial<ContextData>, fn: () => T): T {\n return this.context.extend(additionalContext, fn) as T;\n }\n\n setContext(key: string, value: unknown): void {\n this.context.set(key, value);\n }\n\n getContext(): ContextData {\n return this.context.getContext();\n }\n\n // Tracing functionality\n trace: TraceMethod = async <T>(\n options: TracingOptions,\n fn: () => T | Promise<T>\n ): Promise<T> => {\n if (!this.config.enableTracing) {\n return await fn();\n }\n\n return this.tracer.trace(options, fn);\n };\n\n getTraceId(): string | undefined {\n return this.tracer.getCurrentTrace()?.traceId;\n }\n\n startSpan(options: TracingOptions) {\n if (!this.config.enableTracing) {\n return null;\n }\n return this.tracer.startSpan(options);\n }\n\n finishSpan(spanId: string): number | undefined {\n if (!this.config.enableTracing) {\n return undefined;\n }\n return this.tracer.finishSpan(spanId);\n }\n\n addTraceMetadata(key: string, value: unknown): void {\n if (this.config.enableTracing) {\n this.tracer.addMetadata(key, value);\n }\n }\n\n addTraceTags(...tags: string[]): void {\n if (this.config.enableTracing) {\n this.tracer.addTags(...tags);\n }\n }\n\n // Timer functionality\n startTimer(id?: string): Timer | null {\n if (!this.config.enableTiming) {\n return null;\n }\n return this.timerManager.start(id);\n }\n\n stopTimer(id: string): number | undefined {\n if (!this.config.enableTiming) {\n return undefined;\n }\n return this.timerManager.stop(id);\n }\n\n getTimer(id: string): Timer | undefined {\n return this.timerManager.get(id);\n }\n\n // Utility methods\n child(context: Partial<ContextData>): Logger {\n const childLogger = new Logger(this.config);\n Object.entries(context).forEach(([key, value]) => {\n childLogger.setContext(key, value);\n });\n return childLogger;\n }\n\n setLevel(level: LogLevel): void {\n this.config.level = level;\n }\n\n setFormatter(formatter: Formatter): void {\n this.formatter = formatter;\n }\n\n // Performance profiling\n async profile<T>(\n operationName: string,\n fn: () => T | Promise<T>,\n options?: { logResult?: boolean; logLevel?: LogLevel }\n ): Promise<T> {\n const timer = this.startTimer(`profile-${operationName}`);\n const startTime = performance.now();\n\n try {\n const result = await this.tracer.trace(\n {\n operationType: 'custom',\n operationName: `profile:${operationName}`,\n autoTiming: true,\n },\n fn\n );\n\n const duration = performance.now() - startTime;\n timer?.stop();\n\n const logLevel = options?.logLevel || LogLevel.DEBUG;\n this.log(logLevel, `Profile: ${operationName} completed`, {\n operation: operationName,\n duration: `${duration.toFixed(2)}ms`,\n result: options?.logResult ? result : '[result hidden]',\n });\n\n return result;\n } catch (error) {\n const duration = performance.now() - startTime;\n timer?.stop();\n\n this.error(\n `Profile: ${operationName} failed`,\n {\n operation: operationName,\n duration: `${duration.toFixed(2)}ms`,\n error: (error as Error).message,\n },\n error as Error\n );\n\n throw error;\n }\n }\n\n // HTTP request logging helper\n logRequest(\n method: string,\n url: string,\n statusCode?: number,\n duration?: number\n ): void {\n const level = this.getHttpLogLevel(statusCode);\n const message = `${method.toUpperCase()} ${url}${statusCode ? ` ${statusCode}` : ''}`;\n\n this.log(level, message, {\n method,\n url,\n statusCode,\n duration: duration ? `${duration.toFixed(2)}ms` : undefined,\n type: 'http_request',\n });\n }\n\n // Flush any pending logs (useful for graceful shutdown)\n async flush(): Promise<void> {\n this.timerManager.clear();\n }\n\n // Get logger statistics\n getStats(): {\n activeTimers: number;\n activeSpans: number;\n config: LoggerConfig;\n } {\n return {\n activeTimers: this.timerManager.getActive().length,\n activeSpans: this.tracer.getActiveSpans().length,\n config: { ...this.config },\n };\n }\n\n // Output method (can be overridden for custom outputs)\n protected output(message: string, level: LogLevel): void {\n if (level >= LogLevel.ERROR) {\n console.error(message);\n } else {\n console.log(message);\n }\n }\n\n // Core log method\n private log(\n level: LogLevel,\n message: string,\n metadata?: Record<string, unknown>,\n error?: Error\n ): void {\n if (level < this.config.level) {\n return; // Skip logs below configured level\n }\n\n const currentTrace = this.config.enableTracing\n ? this.tracer.getCurrentTrace()\n : undefined;\n const contextData = this.config.enableContext\n ? this.context.getContext()\n : undefined;\n\n const entry: LogEntry = {\n level,\n message,\n timestamp: new Date(),\n traceId: currentTrace?.traceId,\n parentId: currentTrace?.parentId,\n spanId: currentTrace?.spanId,\n context: contextData,\n metadata,\n error,\n tags: currentTrace?.tags,\n };\n\n // Add duration if we're in a traced operation\n if (currentTrace?.metadata?.duration) {\n entry.duration = currentTrace.metadata.duration as number;\n }\n\n const formatted = this.formatter.format(entry);\n this.output(formatted, level);\n }\n\n private getHttpLogLevel(statusCode?: number): LogLevel {\n if (!statusCode) return LogLevel.INFO;\n if (statusCode >= 500) return LogLevel.ERROR;\n if (statusCode >= 400) return LogLevel.WARN;\n return LogLevel.INFO;\n }\n}\n"],"mappings":"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"}
|
package/dist/logger.mjs
CHANGED
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
import { ContextData, Formatter, LogLevel, LoggerConfig, TraceContext, TraceMethod, TracingOptions } from "./types.mjs";
|
|
2
|
+
import { Timer } from "./timer.mjs";
|
|
3
|
+
|
|
4
|
+
//#region src/logger.node.d.ts
|
|
5
|
+
declare class Logger {
|
|
6
|
+
private config;
|
|
7
|
+
private formatter;
|
|
8
|
+
private context;
|
|
9
|
+
private tracer;
|
|
10
|
+
private timerManager;
|
|
11
|
+
constructor(config?: Partial<LoggerConfig>);
|
|
12
|
+
traceLog(message: string, metadata?: Record<string, unknown>): void;
|
|
13
|
+
debug(message: string, metadata?: Record<string, unknown>): void;
|
|
14
|
+
info(message: string, metadata?: Record<string, unknown>): void;
|
|
15
|
+
warn(message: string, metadata?: Record<string, unknown>): void;
|
|
16
|
+
error(message: string, metadata?: Record<string, unknown>, error?: Error): void;
|
|
17
|
+
fatal(message: string, metadata?: Record<string, unknown>, error?: Error): void;
|
|
18
|
+
withContext<T>(context: ContextData, fn: () => T): T;
|
|
19
|
+
extendContext<T>(additionalContext: Partial<ContextData>, fn: () => T): T;
|
|
20
|
+
setContext(key: string, value: unknown): void;
|
|
21
|
+
getContext(): ContextData;
|
|
22
|
+
trace: TraceMethod;
|
|
23
|
+
getTraceId(): string | undefined;
|
|
24
|
+
startSpan(options: TracingOptions): TraceContext | null;
|
|
25
|
+
finishSpan(spanId: string): number | undefined;
|
|
26
|
+
addTraceMetadata(key: string, value: unknown): void;
|
|
27
|
+
addTraceTags(...tags: string[]): void;
|
|
28
|
+
startTimer(id?: string): Timer | null;
|
|
29
|
+
stopTimer(id: string): number | undefined;
|
|
30
|
+
getTimer(id: string): Timer | undefined;
|
|
31
|
+
child(context: Partial<ContextData>): Logger;
|
|
32
|
+
setLevel(level: LogLevel): void;
|
|
33
|
+
setFormatter(formatter: Formatter): void;
|
|
34
|
+
profile<T>(operationName: string, fn: () => T | Promise<T>, options?: {
|
|
35
|
+
logResult?: boolean;
|
|
36
|
+
logLevel?: LogLevel;
|
|
37
|
+
}): Promise<T>;
|
|
38
|
+
logRequest(method: string, url: string, statusCode?: number, duration?: number): void;
|
|
39
|
+
flush(): Promise<void>;
|
|
40
|
+
getStats(): {
|
|
41
|
+
activeTimers: number;
|
|
42
|
+
activeSpans: number;
|
|
43
|
+
config: LoggerConfig;
|
|
44
|
+
};
|
|
45
|
+
protected output(message: string, level: LogLevel): void;
|
|
46
|
+
private log;
|
|
47
|
+
private getHttpLogLevel;
|
|
48
|
+
}
|
|
49
|
+
//#endregion
|
|
50
|
+
export { Logger };
|
|
51
|
+
//# sourceMappingURL=logger.node.d.mts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"logger.node.d.mts","names":[],"sources":["../src/logger.node.ts"],"sourcesContent":[],"mappings":"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"}
|