@beignet/provider-logger-pino 0.0.33 → 0.0.35
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/CHANGELOG.md +13 -0
- package/README.md +30 -7
- package/dist/index.d.ts +30 -86
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +15 -28
- package/dist/index.js.map +1 -1
- package/package.json +2 -2
- package/src/index.ts +55 -34
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,18 @@
|
|
|
1
1
|
# @beignet/provider-logger-pino
|
|
2
2
|
|
|
3
|
+
## 0.0.35
|
|
4
|
+
|
|
5
|
+
### Patch Changes
|
|
6
|
+
|
|
7
|
+
- 397f106: Standardize framework-owned operational errors, degrade opaque OpenAPI path parameters safely, and add direct Redis, Pino, and Upstash adapters.
|
|
8
|
+
- 7d0c795: Expose stable named provider types while keeping private config schemas out of package declarations and preserving validated config and contributed-port inference. Drizzle's Postgres and MySQL config schema constants are now internal; use the exported config interfaces for validated shapes.
|
|
9
|
+
|
|
10
|
+
## 0.0.34
|
|
11
|
+
|
|
12
|
+
### Patch Changes
|
|
13
|
+
|
|
14
|
+
- 9345cc9: Stabilize the pre-1.0 public surface around factory-only providers, canonical server and testing imports, consistent memory naming, and the removal of deprecated aliases.
|
|
15
|
+
|
|
3
16
|
## 0.0.33
|
|
4
17
|
|
|
5
18
|
## 0.0.32
|
package/README.md
CHANGED
|
@@ -10,6 +10,10 @@ Use this package when you want `ctx.ports.logger` backed by Pino while keeping
|
|
|
10
10
|
application code dependent on the stable `LoggerPort` interface from
|
|
11
11
|
`@beignet/core/ports`.
|
|
12
12
|
|
|
13
|
+
`createPinoLoggerProvider(...)` returns the stable `PinoLoggerProvider` type.
|
|
14
|
+
`LoggerPinoConfig` describes its validated config; the Zod schema remains
|
|
15
|
+
internal.
|
|
16
|
+
|
|
13
17
|
## Install
|
|
14
18
|
|
|
15
19
|
```bash
|
|
@@ -26,13 +30,13 @@ bun add -d pino-pretty
|
|
|
26
30
|
|
|
27
31
|
```ts
|
|
28
32
|
import { createNextServer, createNextServerLoader } from "@beignet/next";
|
|
29
|
-
import {
|
|
33
|
+
import { createPinoLoggerProvider } from "@beignet/provider-logger-pino";
|
|
30
34
|
import { appPorts } from "@/infra/app-ports";
|
|
31
35
|
|
|
32
36
|
export const getServer = createNextServerLoader(() =>
|
|
33
37
|
createNextServer({
|
|
34
38
|
ports: appPorts,
|
|
35
|
-
providers: [
|
|
39
|
+
providers: [createPinoLoggerProvider()],
|
|
36
40
|
context: ({ ports }) => ({
|
|
37
41
|
requestId: crypto.randomUUID(),
|
|
38
42
|
ports,
|
|
@@ -77,6 +81,23 @@ export const providers = [
|
|
|
77
81
|
];
|
|
78
82
|
```
|
|
79
83
|
|
|
84
|
+
### Direct adapter
|
|
85
|
+
|
|
86
|
+
Use `createPinoLogger(...)` when the app owns Pino configuration, transports,
|
|
87
|
+
or destinations:
|
|
88
|
+
|
|
89
|
+
```ts
|
|
90
|
+
import { createPinoLogger } from "@beignet/provider-logger-pino";
|
|
91
|
+
import pino from "pino";
|
|
92
|
+
|
|
93
|
+
const destination = pino.destination("./app.log");
|
|
94
|
+
const pinoLogger = pino({ level: "info" }, destination);
|
|
95
|
+
const logger = createPinoLogger({ logger: pinoLogger });
|
|
96
|
+
```
|
|
97
|
+
|
|
98
|
+
The direct factory only adapts the supplied Pino logger to `LoggerPort`; the
|
|
99
|
+
caller owns flushing and destination shutdown.
|
|
100
|
+
|
|
80
101
|
## Usage
|
|
81
102
|
|
|
82
103
|
```ts
|
|
@@ -93,9 +114,10 @@ log.error("Failed to publish post", { error });
|
|
|
93
114
|
|
|
94
115
|
| Export | Purpose |
|
|
95
116
|
| --- | --- |
|
|
96
|
-
| `
|
|
97
|
-
| `
|
|
98
|
-
| `
|
|
117
|
+
| `createPinoLogger(options)` | Adapt an app-owned Pino logger to `LoggerPort` |
|
|
118
|
+
| `CreatePinoLoggerOptions` | Options for `createPinoLogger()` |
|
|
119
|
+
| `createPinoLoggerProvider(options?)` | Provider factory; omitted options use `LOG_*` env values |
|
|
120
|
+
| `CreatePinoLoggerProviderOptions` | Options for `createPinoLoggerProvider()` |
|
|
99
121
|
| `LoggerPinoConfig` | Validated provider config type |
|
|
100
122
|
| `LoggerPort` | Re-export from `@beignet/core/ports` |
|
|
101
123
|
| `LogLevel` | Re-export from `@beignet/core/ports` |
|
|
@@ -103,8 +125,9 @@ log.error("Failed to publish post", { error });
|
|
|
103
125
|
## Installed ports
|
|
104
126
|
|
|
105
127
|
The provider contributes `ctx.ports.logger`, the standard Beignet
|
|
106
|
-
`LoggerPort`.
|
|
107
|
-
|
|
128
|
+
`LoggerPort`. Use `createPinoLogger(...)` when app infrastructure needs to own
|
|
129
|
+
the underlying Pino logger; application workflows should continue to depend on
|
|
130
|
+
the stable port.
|
|
108
131
|
|
|
109
132
|
## Instrumentation
|
|
110
133
|
|
package/dist/index.d.ts
CHANGED
|
@@ -12,11 +12,11 @@
|
|
|
12
12
|
* @example
|
|
13
13
|
* ```ts
|
|
14
14
|
* import { createNextServer } from "@beignet/next";
|
|
15
|
-
* import {
|
|
15
|
+
* import { createPinoLoggerProvider } from "@beignet/provider-logger-pino";
|
|
16
16
|
*
|
|
17
17
|
* const server = await createNextServer({
|
|
18
18
|
* ports: basePorts,
|
|
19
|
-
* providers: [
|
|
19
|
+
* providers: [createPinoLoggerProvider()],
|
|
20
20
|
* // ...
|
|
21
21
|
* });
|
|
22
22
|
*
|
|
@@ -29,38 +29,41 @@
|
|
|
29
29
|
* ```
|
|
30
30
|
*/
|
|
31
31
|
import type { LoggerPort } from "@beignet/core/ports";
|
|
32
|
-
import {
|
|
32
|
+
import { type AnyProviderConfigSchema, type ServiceProvider } from "@beignet/core/providers";
|
|
33
|
+
import { type Logger as PinoLogger } from "pino";
|
|
33
34
|
/**
|
|
34
35
|
* Logger port types re-exported for provider consumers.
|
|
35
36
|
*/
|
|
36
37
|
export type { LoggerPort, LogLevel } from "@beignet/core/ports";
|
|
37
38
|
/**
|
|
38
|
-
*
|
|
39
|
-
* Validates environment variables with LOG_ prefix.
|
|
39
|
+
* Validated configuration for the Pino logger provider.
|
|
40
40
|
*/
|
|
41
|
-
|
|
42
|
-
LEVEL:
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
41
|
+
export interface LoggerPinoConfig {
|
|
42
|
+
LEVEL: "trace" | "debug" | "info" | "warn" | "error" | "fatal";
|
|
43
|
+
FORMAT: "json" | "pretty";
|
|
44
|
+
SERVICE?: string;
|
|
45
|
+
TIMESTAMP: boolean;
|
|
46
|
+
}
|
|
47
|
+
export interface PinoLoggerProviderPorts {
|
|
48
|
+
logger: LoggerPort;
|
|
49
|
+
}
|
|
50
|
+
/**
|
|
51
|
+
* Pino logger lifecycle provider with stable contributed-port typing.
|
|
52
|
+
*/
|
|
53
|
+
export type PinoLoggerProvider = ServiceProvider<unknown, AnyProviderConfigSchema<LoggerPinoConfig>, Pick<PinoLoggerProviderPorts, keyof PinoLoggerProviderPorts>>;
|
|
54
|
+
/**
|
|
55
|
+
* Options for adapting an app-owned Pino logger directly.
|
|
56
|
+
*/
|
|
57
|
+
export interface CreatePinoLoggerOptions {
|
|
58
|
+
/**
|
|
59
|
+
* Configured Pino logger. The caller owns its destination and lifecycle.
|
|
60
|
+
*/
|
|
61
|
+
logger: PinoLogger;
|
|
62
|
+
}
|
|
60
63
|
/**
|
|
61
|
-
*
|
|
64
|
+
* Adapt an app-owned Pino logger to Beignet's stable LoggerPort.
|
|
62
65
|
*/
|
|
63
|
-
export
|
|
66
|
+
export declare function createPinoLogger(options: CreatePinoLoggerOptions): LoggerPort;
|
|
64
67
|
/**
|
|
65
68
|
* Options for the Pino logger provider factory.
|
|
66
69
|
*/
|
|
@@ -87,64 +90,5 @@ export interface CreatePinoLoggerProviderOptions {
|
|
|
87
90
|
*
|
|
88
91
|
* Options override the corresponding `LOG_*` env values.
|
|
89
92
|
*/
|
|
90
|
-
export declare function createPinoLoggerProvider(options?: CreatePinoLoggerProviderOptions):
|
|
91
|
-
LEVEL: z.ZodDefault<z.ZodEnum<{
|
|
92
|
-
trace: "trace";
|
|
93
|
-
debug: "debug";
|
|
94
|
-
info: "info";
|
|
95
|
-
warn: "warn";
|
|
96
|
-
error: "error";
|
|
97
|
-
fatal: "fatal";
|
|
98
|
-
}>>;
|
|
99
|
-
FORMAT: z.ZodDefault<z.ZodEnum<{
|
|
100
|
-
json: "json";
|
|
101
|
-
pretty: "pretty";
|
|
102
|
-
}>>;
|
|
103
|
-
SERVICE: z.ZodOptional<z.ZodString>;
|
|
104
|
-
TIMESTAMP: z.ZodDefault<z.ZodPipe<z.ZodEnum<{
|
|
105
|
-
true: "true";
|
|
106
|
-
false: "false";
|
|
107
|
-
}>, z.ZodTransform<boolean, "true" | "false">>>;
|
|
108
|
-
}, z.core.$strip>, {
|
|
109
|
-
logger: LoggerPort;
|
|
110
|
-
}, unknown, void>;
|
|
111
|
-
/**
|
|
112
|
-
* Default env-backed Pino logger provider.
|
|
113
|
-
*
|
|
114
|
-
* Configuration via environment variables:
|
|
115
|
-
* - LOG_LEVEL: Minimum log level (trace/debug/info/warn/error/fatal, default: info)
|
|
116
|
-
* - LOG_FORMAT: Log format (json/pretty, default: json)
|
|
117
|
-
* - LOG_SERVICE: Optional service name for log enrichment
|
|
118
|
-
* - LOG_TIMESTAMP: Whether to include timestamps (true/false, default: true)
|
|
119
|
-
*
|
|
120
|
-
* @example
|
|
121
|
-
* ```ts
|
|
122
|
-
* const server = await createNextServer({
|
|
123
|
-
* ports: basePorts,
|
|
124
|
-
* providers: [pinoLoggerProvider],
|
|
125
|
-
* // ...
|
|
126
|
-
* });
|
|
127
|
-
* ```
|
|
128
|
-
*/
|
|
129
|
-
export declare const pinoLoggerProvider: import("@beignet/core/providers").ServiceProvider<unknown, z.ZodObject<{
|
|
130
|
-
LEVEL: z.ZodDefault<z.ZodEnum<{
|
|
131
|
-
trace: "trace";
|
|
132
|
-
debug: "debug";
|
|
133
|
-
info: "info";
|
|
134
|
-
warn: "warn";
|
|
135
|
-
error: "error";
|
|
136
|
-
fatal: "fatal";
|
|
137
|
-
}>>;
|
|
138
|
-
FORMAT: z.ZodDefault<z.ZodEnum<{
|
|
139
|
-
json: "json";
|
|
140
|
-
pretty: "pretty";
|
|
141
|
-
}>>;
|
|
142
|
-
SERVICE: z.ZodOptional<z.ZodString>;
|
|
143
|
-
TIMESTAMP: z.ZodDefault<z.ZodPipe<z.ZodEnum<{
|
|
144
|
-
true: "true";
|
|
145
|
-
false: "false";
|
|
146
|
-
}>, z.ZodTransform<boolean, "true" | "false">>>;
|
|
147
|
-
}, z.core.$strip>, {
|
|
148
|
-
logger: LoggerPort;
|
|
149
|
-
}, unknown, void>;
|
|
93
|
+
export declare function createPinoLoggerProvider(options?: CreatePinoLoggerProviderOptions): PinoLoggerProvider;
|
|
150
94
|
//# sourceMappingURL=index.d.ts.map
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA6BG;AAEH,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAC;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA6BG;AAEH,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAC;AACtD,OAAO,EACL,KAAK,uBAAuB,EAE5B,KAAK,eAAe,EACrB,MAAM,yBAAyB,CAAC;AACjC,OAAa,EAAE,KAAK,MAAM,IAAI,UAAU,EAAE,MAAM,MAAM,CAAC;AAGvD;;GAEG;AACH,YAAY,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,qBAAqB,CAAC;AAgDhE;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAC/B,KAAK,EAAE,OAAO,GAAG,OAAO,GAAG,MAAM,GAAG,MAAM,GAAG,OAAO,GAAG,OAAO,CAAC;IAC/D,MAAM,EAAE,MAAM,GAAG,QAAQ,CAAC;IAC1B,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,OAAO,CAAC;CACpB;AAED,MAAM,WAAW,uBAAuB;IACtC,MAAM,EAAE,UAAU,CAAC;CACpB;AAED;;GAEG;AACH,MAAM,MAAM,kBAAkB,GAAG,eAAe,CAC9C,OAAO,EACP,uBAAuB,CAAC,gBAAgB,CAAC,EACzC,IAAI,CAAC,uBAAuB,EAAE,MAAM,uBAAuB,CAAC,CAC7D,CAAC;AA8EF;;GAEG;AACH,MAAM,WAAW,uBAAuB;IACtC;;OAEG;IACH,MAAM,EAAE,UAAU,CAAC;CACpB;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,uBAAuB,GAAG,UAAU,CAE7E;AAED;;GAEG;AACH,MAAM,WAAW,+BAA+B;IAC9C;;OAEG;IACH,KAAK,CAAC,EAAE,gBAAgB,CAAC,OAAO,CAAC,CAAC;IAClC;;OAEG;IACH,MAAM,CAAC,EAAE,gBAAgB,CAAC,QAAQ,CAAC,CAAC;IACpC;;OAEG;IACH,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB;;OAEG;IACH,SAAS,CAAC,EAAE,OAAO,CAAC;CACrB;AAED;;;;GAIG;AACH,wBAAgB,wBAAwB,CACtC,OAAO,GAAE,+BAAoC,GAC5C,kBAAkB,CA+CpB"}
|
package/dist/index.js
CHANGED
|
@@ -12,11 +12,11 @@
|
|
|
12
12
|
* @example
|
|
13
13
|
* ```ts
|
|
14
14
|
* import { createNextServer } from "@beignet/next";
|
|
15
|
-
* import {
|
|
15
|
+
* import { createPinoLoggerProvider } from "@beignet/provider-logger-pino";
|
|
16
16
|
*
|
|
17
17
|
* const server = await createNextServer({
|
|
18
18
|
* ports: basePorts,
|
|
19
|
-
* providers: [
|
|
19
|
+
* providers: [createPinoLoggerProvider()],
|
|
20
20
|
* // ...
|
|
21
21
|
* });
|
|
22
22
|
*
|
|
@@ -28,7 +28,7 @@
|
|
|
28
28
|
* log.info("Processing request");
|
|
29
29
|
* ```
|
|
30
30
|
*/
|
|
31
|
-
import { createProvider } from "@beignet/core/providers";
|
|
31
|
+
import { createProvider, } from "@beignet/core/providers";
|
|
32
32
|
import pino from "pino";
|
|
33
33
|
import { z } from "zod";
|
|
34
34
|
/**
|
|
@@ -79,7 +79,7 @@ const LoggerPinoConfigSchema = z.object({
|
|
|
79
79
|
* @param bindings - Optional base bindings to add to all log entries
|
|
80
80
|
* @returns Configured Pino logger instance
|
|
81
81
|
*/
|
|
82
|
-
function
|
|
82
|
+
function createPinoInstance(config, bindings = {}) {
|
|
83
83
|
const pinoOptions = {
|
|
84
84
|
level: config.LEVEL,
|
|
85
85
|
timestamp: config.TIMESTAMP ? pino.stdTimeFunctions.isoTime : false,
|
|
@@ -123,7 +123,7 @@ function createPinoLogger(config, bindings = {}) {
|
|
|
123
123
|
* @param logger - Pino logger instance to wrap
|
|
124
124
|
* @returns LoggerPort implementation
|
|
125
125
|
*/
|
|
126
|
-
function
|
|
126
|
+
function adaptPinoLogger(logger) {
|
|
127
127
|
return {
|
|
128
128
|
trace: (message, meta) => meta ? logger.trace(meta, message) : logger.trace(message),
|
|
129
129
|
debug: (message, meta) => meta ? logger.debug(meta, message) : logger.debug(message),
|
|
@@ -131,9 +131,15 @@ function wrapPino(logger) {
|
|
|
131
131
|
warn: (message, meta) => meta ? logger.warn(meta, message) : logger.warn(message),
|
|
132
132
|
error: (message, meta) => meta ? logger.error(meta, message) : logger.error(message),
|
|
133
133
|
fatal: (message, meta) => meta ? logger.fatal(meta, message) : logger.fatal(message),
|
|
134
|
-
child: (bindings) =>
|
|
134
|
+
child: (bindings) => adaptPinoLogger(logger.child(bindings)),
|
|
135
135
|
};
|
|
136
136
|
}
|
|
137
|
+
/**
|
|
138
|
+
* Adapt an app-owned Pino logger to Beignet's stable LoggerPort.
|
|
139
|
+
*/
|
|
140
|
+
export function createPinoLogger(options) {
|
|
141
|
+
return adaptPinoLogger(options.logger);
|
|
142
|
+
}
|
|
137
143
|
/**
|
|
138
144
|
* Create an env-backed Pino logger provider.
|
|
139
145
|
*
|
|
@@ -157,7 +163,7 @@ export function createPinoLoggerProvider(options = {}) {
|
|
|
157
163
|
if (!config) {
|
|
158
164
|
// Every schema field has a default, so a declared config always
|
|
159
165
|
// parses; this only guards the typing.
|
|
160
|
-
throw new Error("[
|
|
166
|
+
throw new Error("[createPinoLoggerProvider] Provider config was not loaded.");
|
|
161
167
|
}
|
|
162
168
|
const resolvedConfig = {
|
|
163
169
|
LEVEL: config.LEVEL,
|
|
@@ -171,30 +177,11 @@ export function createPinoLoggerProvider(options = {}) {
|
|
|
171
177
|
baseBindings.service = service;
|
|
172
178
|
}
|
|
173
179
|
// Create and configure Pino logger
|
|
174
|
-
const logger =
|
|
180
|
+
const logger = createPinoInstance(resolvedConfig, baseBindings);
|
|
175
181
|
// Wrap logger to match LoggerPort interface
|
|
176
|
-
const port =
|
|
182
|
+
const port = createPinoLogger({ logger });
|
|
177
183
|
return { ports: { logger: port } };
|
|
178
184
|
},
|
|
179
185
|
});
|
|
180
186
|
}
|
|
181
|
-
/**
|
|
182
|
-
* Default env-backed Pino logger provider.
|
|
183
|
-
*
|
|
184
|
-
* Configuration via environment variables:
|
|
185
|
-
* - LOG_LEVEL: Minimum log level (trace/debug/info/warn/error/fatal, default: info)
|
|
186
|
-
* - LOG_FORMAT: Log format (json/pretty, default: json)
|
|
187
|
-
* - LOG_SERVICE: Optional service name for log enrichment
|
|
188
|
-
* - LOG_TIMESTAMP: Whether to include timestamps (true/false, default: true)
|
|
189
|
-
*
|
|
190
|
-
* @example
|
|
191
|
-
* ```ts
|
|
192
|
-
* const server = await createNextServer({
|
|
193
|
-
* ports: basePorts,
|
|
194
|
-
* providers: [pinoLoggerProvider],
|
|
195
|
-
* // ...
|
|
196
|
-
* });
|
|
197
|
-
* ```
|
|
198
|
-
*/
|
|
199
|
-
export const pinoLoggerProvider = createPinoLoggerProvider();
|
|
200
187
|
//# sourceMappingURL=index.js.map
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA6BG;AAGH,OAAO,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@beignet/provider-logger-pino",
|
|
3
|
-
"version": "0.0.
|
|
3
|
+
"version": "0.0.35",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"description": "Pino logger provider for Beignet - adds logger port using pino",
|
|
6
6
|
"main": "./dist/index.js",
|
|
@@ -88,7 +88,7 @@
|
|
|
88
88
|
"registration": {
|
|
89
89
|
"required": true,
|
|
90
90
|
"tokens": [
|
|
91
|
-
"
|
|
91
|
+
"createPinoLoggerProvider"
|
|
92
92
|
]
|
|
93
93
|
}
|
|
94
94
|
}
|
package/src/index.ts
CHANGED
|
@@ -12,11 +12,11 @@
|
|
|
12
12
|
* @example
|
|
13
13
|
* ```ts
|
|
14
14
|
* import { createNextServer } from "@beignet/next";
|
|
15
|
-
* import {
|
|
15
|
+
* import { createPinoLoggerProvider } from "@beignet/provider-logger-pino";
|
|
16
16
|
*
|
|
17
17
|
* const server = await createNextServer({
|
|
18
18
|
* ports: basePorts,
|
|
19
|
-
* providers: [
|
|
19
|
+
* providers: [createPinoLoggerProvider()],
|
|
20
20
|
* // ...
|
|
21
21
|
* });
|
|
22
22
|
*
|
|
@@ -30,7 +30,11 @@
|
|
|
30
30
|
*/
|
|
31
31
|
|
|
32
32
|
import type { LoggerPort } from "@beignet/core/ports";
|
|
33
|
-
import {
|
|
33
|
+
import {
|
|
34
|
+
type AnyProviderConfigSchema,
|
|
35
|
+
createProvider,
|
|
36
|
+
type ServiceProvider,
|
|
37
|
+
} from "@beignet/core/providers";
|
|
34
38
|
import pino, { type Logger as PinoLogger } from "pino";
|
|
35
39
|
import { z } from "zod";
|
|
36
40
|
|
|
@@ -83,12 +87,30 @@ const LoggerPinoConfigSchema = z.object({
|
|
|
83
87
|
* Default: true
|
|
84
88
|
*/
|
|
85
89
|
TIMESTAMP: BooleanString.default(true),
|
|
86
|
-
})
|
|
90
|
+
}) satisfies z.ZodType<LoggerPinoConfig>;
|
|
87
91
|
|
|
88
92
|
/**
|
|
89
|
-
*
|
|
93
|
+
* Validated configuration for the Pino logger provider.
|
|
90
94
|
*/
|
|
91
|
-
export
|
|
95
|
+
export interface LoggerPinoConfig {
|
|
96
|
+
LEVEL: "trace" | "debug" | "info" | "warn" | "error" | "fatal";
|
|
97
|
+
FORMAT: "json" | "pretty";
|
|
98
|
+
SERVICE?: string;
|
|
99
|
+
TIMESTAMP: boolean;
|
|
100
|
+
}
|
|
101
|
+
|
|
102
|
+
export interface PinoLoggerProviderPorts {
|
|
103
|
+
logger: LoggerPort;
|
|
104
|
+
}
|
|
105
|
+
|
|
106
|
+
/**
|
|
107
|
+
* Pino logger lifecycle provider with stable contributed-port typing.
|
|
108
|
+
*/
|
|
109
|
+
export type PinoLoggerProvider = ServiceProvider<
|
|
110
|
+
unknown,
|
|
111
|
+
AnyProviderConfigSchema<LoggerPinoConfig>,
|
|
112
|
+
Pick<PinoLoggerProviderPorts, keyof PinoLoggerProviderPorts>
|
|
113
|
+
>;
|
|
92
114
|
|
|
93
115
|
/**
|
|
94
116
|
* Create a Pino logger instance with the given configuration.
|
|
@@ -97,7 +119,7 @@ export type LoggerPinoConfig = z.infer<typeof LoggerPinoConfigSchema>;
|
|
|
97
119
|
* @param bindings - Optional base bindings to add to all log entries
|
|
98
120
|
* @returns Configured Pino logger instance
|
|
99
121
|
*/
|
|
100
|
-
function
|
|
122
|
+
function createPinoInstance(
|
|
101
123
|
config: LoggerPinoConfig,
|
|
102
124
|
bindings: Record<string, unknown> = {},
|
|
103
125
|
): PinoLogger {
|
|
@@ -148,7 +170,7 @@ function createPinoLogger(
|
|
|
148
170
|
* @param logger - Pino logger instance to wrap
|
|
149
171
|
* @returns LoggerPort implementation
|
|
150
172
|
*/
|
|
151
|
-
function
|
|
173
|
+
function adaptPinoLogger(logger: PinoLogger): LoggerPort {
|
|
152
174
|
return {
|
|
153
175
|
trace: (message, meta) =>
|
|
154
176
|
meta ? logger.trace(meta, message) : logger.trace(message),
|
|
@@ -162,10 +184,27 @@ function wrapPino(logger: PinoLogger): LoggerPort {
|
|
|
162
184
|
meta ? logger.error(meta, message) : logger.error(message),
|
|
163
185
|
fatal: (message, meta) =>
|
|
164
186
|
meta ? logger.fatal(meta, message) : logger.fatal(message),
|
|
165
|
-
child: (bindings) =>
|
|
187
|
+
child: (bindings) => adaptPinoLogger(logger.child(bindings)),
|
|
166
188
|
};
|
|
167
189
|
}
|
|
168
190
|
|
|
191
|
+
/**
|
|
192
|
+
* Options for adapting an app-owned Pino logger directly.
|
|
193
|
+
*/
|
|
194
|
+
export interface CreatePinoLoggerOptions {
|
|
195
|
+
/**
|
|
196
|
+
* Configured Pino logger. The caller owns its destination and lifecycle.
|
|
197
|
+
*/
|
|
198
|
+
logger: PinoLogger;
|
|
199
|
+
}
|
|
200
|
+
|
|
201
|
+
/**
|
|
202
|
+
* Adapt an app-owned Pino logger to Beignet's stable LoggerPort.
|
|
203
|
+
*/
|
|
204
|
+
export function createPinoLogger(options: CreatePinoLoggerOptions): LoggerPort {
|
|
205
|
+
return adaptPinoLogger(options.logger);
|
|
206
|
+
}
|
|
207
|
+
|
|
169
208
|
/**
|
|
170
209
|
* Options for the Pino logger provider factory.
|
|
171
210
|
*/
|
|
@@ -195,7 +234,7 @@ export interface CreatePinoLoggerProviderOptions {
|
|
|
195
234
|
*/
|
|
196
235
|
export function createPinoLoggerProvider(
|
|
197
236
|
options: CreatePinoLoggerProviderOptions = {},
|
|
198
|
-
) {
|
|
237
|
+
): PinoLoggerProvider {
|
|
199
238
|
return createProvider({
|
|
200
239
|
name: "logger-pino",
|
|
201
240
|
|
|
@@ -215,7 +254,9 @@ export function createPinoLoggerProvider(
|
|
|
215
254
|
if (!config) {
|
|
216
255
|
// Every schema field has a default, so a declared config always
|
|
217
256
|
// parses; this only guards the typing.
|
|
218
|
-
throw new Error(
|
|
257
|
+
throw new Error(
|
|
258
|
+
"[createPinoLoggerProvider] Provider config was not loaded.",
|
|
259
|
+
);
|
|
219
260
|
}
|
|
220
261
|
|
|
221
262
|
const resolvedConfig: LoggerPinoConfig = {
|
|
@@ -232,32 +273,12 @@ export function createPinoLoggerProvider(
|
|
|
232
273
|
}
|
|
233
274
|
|
|
234
275
|
// Create and configure Pino logger
|
|
235
|
-
const logger =
|
|
276
|
+
const logger = createPinoInstance(resolvedConfig, baseBindings);
|
|
236
277
|
|
|
237
278
|
// Wrap logger to match LoggerPort interface
|
|
238
|
-
const port =
|
|
279
|
+
const port = createPinoLogger({ logger });
|
|
239
280
|
|
|
240
|
-
return { ports: { logger: port } };
|
|
281
|
+
return { ports: { logger: port } satisfies PinoLoggerProviderPorts };
|
|
241
282
|
},
|
|
242
283
|
});
|
|
243
284
|
}
|
|
244
|
-
|
|
245
|
-
/**
|
|
246
|
-
* Default env-backed Pino logger provider.
|
|
247
|
-
*
|
|
248
|
-
* Configuration via environment variables:
|
|
249
|
-
* - LOG_LEVEL: Minimum log level (trace/debug/info/warn/error/fatal, default: info)
|
|
250
|
-
* - LOG_FORMAT: Log format (json/pretty, default: json)
|
|
251
|
-
* - LOG_SERVICE: Optional service name for log enrichment
|
|
252
|
-
* - LOG_TIMESTAMP: Whether to include timestamps (true/false, default: true)
|
|
253
|
-
*
|
|
254
|
-
* @example
|
|
255
|
-
* ```ts
|
|
256
|
-
* const server = await createNextServer({
|
|
257
|
-
* ports: basePorts,
|
|
258
|
-
* providers: [pinoLoggerProvider],
|
|
259
|
-
* // ...
|
|
260
|
-
* });
|
|
261
|
-
* ```
|
|
262
|
-
*/
|
|
263
|
-
export const pinoLoggerProvider = createPinoLoggerProvider();
|