@likec4/log 1.37.0 → 1.38.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/dist/index.d.mts +7 -2
- package/dist/index.mjs +16 -4
- package/package.json +2 -2
- package/src/formatters.ts +17 -0
- package/src/index.ts +6 -5
package/dist/index.d.mts
CHANGED
|
@@ -7,6 +7,11 @@ declare function getMessageOnlyFormatter(): TextFormatter;
|
|
|
7
7
|
declare function getTextFormatter(options?: TextFormatterOptions): TextFormatter;
|
|
8
8
|
declare function getAnsiColorFormatter(options?: AnsiColorFormatterOptions): TextFormatter;
|
|
9
9
|
declare function getConsoleSink(options?: ConsoleSinkOptions): Sink;
|
|
10
|
+
/**
|
|
11
|
+
* Creates a console sink that writes to stderr.
|
|
12
|
+
* (MCP protocol requires stderr to be used for logging)
|
|
13
|
+
*/
|
|
14
|
+
declare function getConsoleStderrSink(options?: ConsoleSinkOptions): Sink;
|
|
10
15
|
|
|
11
16
|
declare function loggable(error: unknown): string;
|
|
12
17
|
|
|
@@ -18,6 +23,6 @@ declare const logger: _logtape_logtape.Logger;
|
|
|
18
23
|
* @returns The child logger.
|
|
19
24
|
*/
|
|
20
25
|
declare function createLogger(subcategory: string | readonly [string] | readonly [string, ...string[]]): _logtape_logtape.Logger;
|
|
21
|
-
declare function configureLogger<TSinkId extends string, TFilterId extends string>(config?: Config<TSinkId, TFilterId
|
|
26
|
+
declare function configureLogger<TSinkId extends string, TFilterId extends string>(config?: Partial<Config<TSinkId, TFilterId>>): void;
|
|
22
27
|
|
|
23
|
-
export { configureLogger, logger as consola, createLogger, errorFromLogRecord, getAnsiColorFormatter, getConsoleSink, getMessageOnlyFormatter, getTextFormatter, loggable, logger, logger as rootLogger };
|
|
28
|
+
export { configureLogger, logger as consola, createLogger, errorFromLogRecord, getAnsiColorFormatter, getConsoleSink, getConsoleStderrSink, getMessageOnlyFormatter, getTextFormatter, loggable, logger, logger as rootLogger };
|
package/dist/index.mjs
CHANGED
|
@@ -1402,6 +1402,18 @@ function getConsoleSink(options) {
|
|
|
1402
1402
|
...options
|
|
1403
1403
|
});
|
|
1404
1404
|
}
|
|
1405
|
+
function getConsoleStderrSink(options) {
|
|
1406
|
+
const formatter = options?.formatter ?? getTextFormatter();
|
|
1407
|
+
return (record) => {
|
|
1408
|
+
const args = formatter(record);
|
|
1409
|
+
if (typeof args === "string") {
|
|
1410
|
+
const msg = args.replace(/\r?\n$/, "");
|
|
1411
|
+
console.error(msg);
|
|
1412
|
+
} else {
|
|
1413
|
+
console.error(...args);
|
|
1414
|
+
}
|
|
1415
|
+
};
|
|
1416
|
+
}
|
|
1405
1417
|
|
|
1406
1418
|
const logger = getLogger("likec4");
|
|
1407
1419
|
function createLogger(subcategory) {
|
|
@@ -1413,11 +1425,11 @@ function configureLogger(config) {
|
|
|
1413
1425
|
configureWasCalled = true;
|
|
1414
1426
|
const sinks = config?.sinks ?? {};
|
|
1415
1427
|
configureSync({
|
|
1428
|
+
reset: true,
|
|
1416
1429
|
...config,
|
|
1417
1430
|
sinks: {
|
|
1418
|
-
|
|
1419
|
-
|
|
1420
|
-
console: sinks["console"] ?? getConsoleSink()
|
|
1431
|
+
console: getConsoleSink(),
|
|
1432
|
+
...sinks
|
|
1421
1433
|
},
|
|
1422
1434
|
loggers: [
|
|
1423
1435
|
{ category: ["logtape", "meta"], sinks: ["console"], lowestLevel: "warning" },
|
|
@@ -1435,4 +1447,4 @@ function configureLogger(config) {
|
|
|
1435
1447
|
}
|
|
1436
1448
|
}
|
|
1437
1449
|
|
|
1438
|
-
export { configureLogger, logger as consola, createLogger, errorFromLogRecord, getAnsiColorFormatter, getConsoleSink, getMessageOnlyFormatter, getTextFormatter, loggable, logger, logger as rootLogger };
|
|
1450
|
+
export { configureLogger, logger as consola, createLogger, errorFromLogRecord, getAnsiColorFormatter, getConsoleSink, getConsoleStderrSink, getMessageOnlyFormatter, getTextFormatter, loggable, logger, logger as rootLogger };
|
package/package.json
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
"name": "@likec4/log",
|
|
3
3
|
"description": "Shared interface for logging",
|
|
4
4
|
"license": "MIT",
|
|
5
|
-
"version": "1.
|
|
5
|
+
"version": "1.38.1",
|
|
6
6
|
"bugs": "https://github.com/likec4/likec4/issues",
|
|
7
7
|
"homepage": "https://likec4.dev",
|
|
8
8
|
"author": "Denis Davydkov <denis@davydkov.com>",
|
|
@@ -42,7 +42,7 @@
|
|
|
42
42
|
"typescript": "5.9.2",
|
|
43
43
|
"unbuild": "3.5.0",
|
|
44
44
|
"wrap-error-message": "^3.0.1",
|
|
45
|
-
"@likec4/tsconfig": "1.
|
|
45
|
+
"@likec4/tsconfig": "1.38.1"
|
|
46
46
|
},
|
|
47
47
|
"scripts": {
|
|
48
48
|
"typecheck": "tsc -b --verbose",
|
package/src/formatters.ts
CHANGED
|
@@ -129,3 +129,20 @@ export function getConsoleSink(options?: ConsoleSinkOptions): Sink {
|
|
|
129
129
|
...options,
|
|
130
130
|
})
|
|
131
131
|
}
|
|
132
|
+
|
|
133
|
+
/**
|
|
134
|
+
* Creates a console sink that writes to stderr.
|
|
135
|
+
* (MCP protocol requires stderr to be used for logging)
|
|
136
|
+
*/
|
|
137
|
+
export function getConsoleStderrSink(options?: ConsoleSinkOptions): Sink {
|
|
138
|
+
const formatter = options?.formatter ?? getTextFormatter()
|
|
139
|
+
return (record: LogRecord) => {
|
|
140
|
+
const args = formatter(record)
|
|
141
|
+
if (typeof args === 'string') {
|
|
142
|
+
const msg = args.replace(/\r?\n$/, '')
|
|
143
|
+
console.error(msg)
|
|
144
|
+
} else {
|
|
145
|
+
console.error(...args)
|
|
146
|
+
}
|
|
147
|
+
}
|
|
148
|
+
}
|
package/src/index.ts
CHANGED
|
@@ -20,6 +20,7 @@ export {
|
|
|
20
20
|
// formatRecord,
|
|
21
21
|
getAnsiColorFormatter,
|
|
22
22
|
getConsoleSink,
|
|
23
|
+
getConsoleStderrSink,
|
|
23
24
|
getMessageOnlyFormatter,
|
|
24
25
|
getTextFormatter,
|
|
25
26
|
} from './formatters'
|
|
@@ -52,24 +53,24 @@ export function createLogger(subcategory: string | readonly [string] | readonly
|
|
|
52
53
|
let configureWasCalled = false
|
|
53
54
|
|
|
54
55
|
export function configureLogger<TSinkId extends string, TFilterId extends string>(
|
|
55
|
-
config?: Config<TSinkId, TFilterId
|
|
56
|
+
config?: Partial<Config<TSinkId, TFilterId>>,
|
|
56
57
|
) {
|
|
57
58
|
try {
|
|
58
59
|
configureWasCalled = true
|
|
59
60
|
const sinks = config?.sinks ?? {}
|
|
60
61
|
configureLogtape<any, any>({
|
|
62
|
+
reset: true,
|
|
61
63
|
...config,
|
|
62
64
|
sinks: {
|
|
65
|
+
console: getConsoleSink(),
|
|
63
66
|
...sinks,
|
|
64
|
-
// @ts-expect-error console is not a valid sink id
|
|
65
|
-
console: sinks['console'] ?? getConsoleSink(),
|
|
66
67
|
},
|
|
67
68
|
loggers: [
|
|
68
|
-
{ category: ['logtape', 'meta'], sinks: ['console'
|
|
69
|
+
{ category: ['logtape', 'meta'], sinks: ['console'], lowestLevel: 'warning' },
|
|
69
70
|
...(config?.loggers ?? [
|
|
70
71
|
{
|
|
71
72
|
category: 'likec4',
|
|
72
|
-
sinks: ['console'
|
|
73
|
+
sinks: ['console'],
|
|
73
74
|
lowestLevel: 'debug',
|
|
74
75
|
},
|
|
75
76
|
]),
|