@mastra/loggers 1.0.3-alpha.0 → 1.1.0-alpha.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/CHANGELOG.md CHANGED
@@ -1,5 +1,52 @@
1
1
  # @mastra/loggers
2
2
 
3
+ ## 1.1.0-alpha.0
4
+
5
+ ### Minor Changes
6
+
7
+ - Added `mixin` and `customLevels` options to `PinoLogger`. ([#14726](https://github.com/mastra-ai/mastra/pull/14726))
8
+
9
+ You can now attach shared fields to every log entry with `mixin`, which is useful for values like trace IDs, request IDs, or service metadata.
10
+
11
+ You can also define custom log levels when you need to match an existing Pino logging setup.
12
+
13
+ **Example**
14
+
15
+ ```ts
16
+ import { PinoLogger } from '@mastra/loggers';
17
+
18
+ const logger = new PinoLogger({
19
+ name: 'Mastra',
20
+ level: 'info',
21
+ mixin() {
22
+ return { traceId: 'abc-123' };
23
+ },
24
+ customLevels: {
25
+ audit: 35,
26
+ },
27
+ });
28
+
29
+ logger.info('User signed in');`
30
+ ```
31
+
32
+ ### Patch Changes
33
+
34
+ - Updated dependencies [[`f16d92c`](https://github.com/mastra-ai/mastra/commit/f16d92c677a119a135cebcf7e2b9f51ada7a9df4)]:
35
+ - @mastra/core@1.18.0-alpha.2
36
+
37
+ ## 1.0.3
38
+
39
+ ### Patch Changes
40
+
41
+ - Fixed: PinoLogger now supports JSON output for log aggregators ([#14306](https://github.com/mastra-ai/mastra/pull/14306))
42
+
43
+ Previously, PinoLogger always used pino-pretty which produced multiline
44
+ colored output, breaking log aggregators like Datadog, Loki, and CloudWatch.
45
+ A new prettyPrint option allows switching to single-line JSON output.
46
+
47
+ - Updated dependencies [[`51970b3`](https://github.com/mastra-ai/mastra/commit/51970b3828494d59a8dd4df143b194d37d31e3f5), [`4444280`](https://github.com/mastra-ai/mastra/commit/444428094253e916ec077e66284e685fde67021e), [`085e371`](https://github.com/mastra-ai/mastra/commit/085e3718a7d0fe9a210fe7dd1c867b9bdfe8d16b), [`b77aa19`](https://github.com/mastra-ai/mastra/commit/b77aa1981361c021f2c881bee8f0c703687f00da), [`dbb879a`](https://github.com/mastra-ai/mastra/commit/dbb879af0b809c668e9b3a9d8bac97d806caa267), [`8b4ce84`](https://github.com/mastra-ai/mastra/commit/8b4ce84aed0808b9805cc4fd7147c1f8a2ef7a36), [`8d4cfe6`](https://github.com/mastra-ai/mastra/commit/8d4cfe6b9a7157d3876206227ec9f04cde6dbc4a), [`dd6ca1c`](https://github.com/mastra-ai/mastra/commit/dd6ca1cdea3b8b6182f4cf61df41070ba0cc0deb), [`ce26fe2`](https://github.com/mastra-ai/mastra/commit/ce26fe2166dd90254f8bee5776e55977143e97de), [`68a019d`](https://github.com/mastra-ai/mastra/commit/68a019d30d22251ddd628a2947d60215c03c350a), [`4cb4edf`](https://github.com/mastra-ai/mastra/commit/4cb4edf3c909d197ec356c1790d13270514ffef6), [`8de3555`](https://github.com/mastra-ai/mastra/commit/8de355572c6fd838f863a3e7e6fe24d0947b774f), [`b26307f`](https://github.com/mastra-ai/mastra/commit/b26307f050df39629511b0e831b8fc26973ce8b1), [`68a019d`](https://github.com/mastra-ai/mastra/commit/68a019d30d22251ddd628a2947d60215c03c350a)]:
48
+ - @mastra/core@1.14.0
49
+
3
50
  ## 1.0.3-alpha.0
4
51
 
5
52
  ### Patch Changes
@@ -3,7 +3,7 @@ name: mastra-loggers
3
3
  description: Documentation for @mastra/loggers. Use when working with @mastra/loggers APIs, configuration, or implementation.
4
4
  metadata:
5
5
  package: "@mastra/loggers"
6
- version: "1.0.3-alpha.0"
6
+ version: "1.1.0-alpha.0"
7
7
  ---
8
8
 
9
9
  ## When to use
@@ -1,5 +1,5 @@
1
1
  {
2
- "version": "1.0.3-alpha.0",
2
+ "version": "1.1.0-alpha.0",
3
3
  "package": "@mastra/loggers",
4
4
  "exports": {},
5
5
  "modules": {}
@@ -19,7 +19,7 @@ The `DefaultExporter` persists traces to your configured storage backend. Not al
19
19
 
20
20
  For production environments with high traffic, we recommend using **ClickHouse** for the observability domain via [composite storage](https://mastra.ai/reference/storage/composite). See [Production Recommendations](https://mastra.ai/docs/observability/tracing/exporters/default) for details.
21
21
 
22
- ## Quick start
22
+ ## Quickstart
23
23
 
24
24
  Configure Observability in your Mastra instance:
25
25
 
@@ -30,6 +30,64 @@ export const mastra = new Mastra({
30
30
 
31
31
  **formatters** (`pino.LoggerOptions['formatters']`): Custom Pino formatters for log serialization.
32
32
 
33
+ **redact** (`pino.LoggerOptions['redact']`): Paths or options for redacting sensitive fields from log output (Pino \`redact\`).
34
+
35
+ **prettyPrint** (`boolean`): When false, disables \`pino-pretty\` and writes raw JSON lines (useful for log aggregators). (Default: `true`)
36
+
37
+ **mixin** (`pino.MixinFn`): Pino mixin function merged into every log object (for example request-scoped \`traceId\` or other shared metadata).
38
+
39
+ **customLevels** (`Record<string, number>`): Custom log levels and numeric values, forwarded to Pino. Standard severity is still logged via \`debug\`, \`info\`, \`warn\`, and \`error\`; extra levels follow Pino’s custom-level behavior.
40
+
41
+ ## Log enrichment with `mixin`
42
+
43
+ Use `mixin` when you want the same structured fields on every line (for correlation with the rest of your services):
44
+
45
+ ```typescript
46
+ import { Mastra } from '@mastra/core'
47
+ import { PinoLogger } from '@mastra/loggers'
48
+
49
+ function getTraceContext() {
50
+ return { traceId: 'abc-123' }
51
+ }
52
+
53
+ export const mastra = new Mastra({
54
+ logger: new PinoLogger({
55
+ name: 'Mastra',
56
+ level: 'info',
57
+ mixin() {
58
+ return getTraceContext()
59
+ },
60
+ }),
61
+ })
62
+ ```
63
+
64
+ ## Custom levels
65
+
66
+ `customLevels` is passed through to Pino. `PinoLogger` only exposes `debug`, `info`, `warn`, and `error`; for any extra level name (for example `audit`), subclass and forward to the underlying Pino instance:
67
+
68
+ ```typescript
69
+ import { Mastra } from '@mastra/core'
70
+ import { PinoLogger } from '@mastra/loggers'
71
+
72
+ type AuditLevel = 'audit'
73
+
74
+ class MastraPinoWithAudit extends PinoLogger<AuditLevel> {
75
+ audit(message: string, meta: Record<string, unknown> = {}) {
76
+ this.logger.audit(meta, message)
77
+ }
78
+ }
79
+
80
+ const logger = new MastraPinoWithAudit({
81
+ name: 'Mastra',
82
+ level: 'info',
83
+ customLevels: { audit: 35 },
84
+ })
85
+
86
+ export const mastra = new Mastra({ logger })
87
+ ```
88
+
89
+ Numeric values follow Pino’s ordering (built-in levels use 10–60). A level of `35` sits between `info` (30) and `warn` (40), so with `level: 'info'` both `info` and `audit` lines are emitted.
90
+
33
91
  ## File transport (structured logs)
34
92
 
35
93
  Writes structured logs to a file using the `FileTransport`. The logger accepts a plain message as the first argument and structured metadata as the second argument. These are internally converted to a `BaseLogMessage` and persisted to the configured file path.
package/dist/index.cjs CHANGED
@@ -37,7 +37,9 @@ var PinoLogger = class _PinoLogger extends logger.MastraLogger {
37
37
  name: options.name || "app",
38
38
  level: options.level || logger.LogLevel.INFO,
39
39
  formatters: options.formatters,
40
- redact: options.redact
40
+ redact: options.redact,
41
+ mixin: options.mixin,
42
+ customLevels: options.customLevels
41
43
  },
42
44
  options.overrideDefaultTransports ? options?.transports?.default : transportsAry.length === 0 ? prettyStream : pino__default.default.multistream([
43
45
  ...transportsAry.map(([, transport]) => ({
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/pino.ts"],"names":["MastraLogger","pretty","pino","LogLevel"],"mappings":"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","file":"index.cjs","sourcesContent":["import type { LoggerTransport } from '@mastra/core/logger';\nimport { LogLevel, MastraLogger } from '@mastra/core/logger';\nimport pino from 'pino';\nimport pretty from 'pino-pretty';\n\ntype TransportMap = Record<string, LoggerTransport>;\n\nexport type { LogLevel } from '@mastra/core/logger';\n\nexport interface PinoLoggerOptions {\n name?: string;\n level?: LogLevel;\n transports?: TransportMap;\n overrideDefaultTransports?: boolean;\n formatters?: pino.LoggerOptions['formatters'];\n redact?: pino.LoggerOptions['redact'];\n /**\n * When false, disables pino-pretty and outputs raw JSON.\n * Useful when sending logs to aggregators like Datadog,\n * Loki, or CloudWatch that expect single-line JSON per entry.\n * @default true\n */\n prettyPrint?: boolean;\n}\n\ninterface PinoLoggerInternalOptions extends PinoLoggerOptions {\n /** @internal Used internally for child loggers */\n _logger?: pino.Logger;\n}\n\nexport class PinoLogger extends MastraLogger {\n protected logger: pino.Logger;\n\n constructor(options: PinoLoggerOptions = {}) {\n super(options);\n\n const internalOptions = options as PinoLoggerInternalOptions;\n\n // If an existing pino logger is provided (for child loggers), use it directly\n if (internalOptions._logger) {\n this.logger = internalOptions._logger;\n return;\n }\n\n const shouldPrettyPrint = options.prettyPrint ?? true;\n let prettyStream: ReturnType<typeof pretty> | undefined = undefined;\n if (!options.overrideDefaultTransports && shouldPrettyPrint) {\n prettyStream = pretty({\n colorize: true,\n levelFirst: true,\n ignore: 'pid,hostname',\n colorizeObjects: true,\n translateTime: 'SYS:standard',\n singleLine: false,\n });\n }\n\n const transportsAry = [...this.getTransports().entries()];\n this.logger = pino(\n {\n name: options.name || 'app',\n level: options.level || LogLevel.INFO,\n formatters: options.formatters,\n redact: options.redact,\n },\n options.overrideDefaultTransports\n ? options?.transports?.default\n : transportsAry.length === 0\n ? prettyStream // undefined when prettyPrint:false → pino native JSON\n : pino.multistream([\n ...transportsAry.map(([, transport]) => ({\n stream: transport,\n level: options.level || LogLevel.INFO,\n })),\n ...(prettyStream // only add prettyStream to multistream if it exists\n ? [{ stream: prettyStream, level: options.level || LogLevel.INFO }]\n : []),\n ]),\n );\n }\n\n /**\n * Creates a child logger with additional bound context.\n * All logs from the child logger will include the bound context.\n *\n * @param bindings - Key-value pairs to include in all logs from this child logger\n * @returns A new PinoLogger instance with the bound context\n *\n * @example\n * ```typescript\n * const baseLogger = new PinoLogger({ name: 'MyApp' });\n *\n * // Create module-scoped logger\n * const serviceLogger = baseLogger.child({ module: 'UserService' });\n * serviceLogger.info('User created', { userId: '123' });\n * // Output includes: { module: 'UserService', userId: '123', msg: 'User created' }\n *\n * // Create request-scoped logger\n * const requestLogger = baseLogger.child({ requestId: req.id });\n * requestLogger.error('Request failed', { err: error });\n * // Output includes: { requestId: 'abc', msg: 'Request failed', err: {...} }\n * ```\n */\n child(bindings: Record<string, unknown>): PinoLogger {\n const childPino = this.logger.child(bindings);\n const childOptions: PinoLoggerInternalOptions = {\n name: this.name,\n level: this.level,\n transports: Object.fromEntries(this.transports),\n _logger: childPino,\n };\n return new PinoLogger(childOptions);\n }\n\n debug(message: string, args: Record<string, any> = {}): void {\n this.logger.debug(args, message);\n }\n\n info(message: string, args: Record<string, any> = {}): void {\n this.logger.info(args, message);\n }\n\n warn(message: string, args: Record<string, any> = {}): void {\n this.logger.warn(args, message);\n }\n\n error(message: string, args: Record<string, any> = {}): void {\n this.logger.error(args, message);\n }\n}\n"]}
1
+ {"version":3,"sources":["../src/pino.ts"],"names":["MastraLogger","pretty","pino","LogLevel"],"mappings":"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","file":"index.cjs","sourcesContent":["import type { LoggerTransport } from '@mastra/core/logger';\nimport { LogLevel, MastraLogger } from '@mastra/core/logger';\nimport pino from 'pino';\nimport pretty from 'pino-pretty';\n\ntype TransportMap = Record<string, LoggerTransport>;\n\nexport type { LogLevel } from '@mastra/core/logger';\n\nexport interface PinoLoggerOptions<CustomLevels extends string = never> {\n name?: string;\n level?: LogLevel;\n transports?: TransportMap;\n overrideDefaultTransports?: boolean;\n formatters?: pino.LoggerOptions['formatters'];\n redact?: pino.LoggerOptions['redact'];\n mixin?: pino.MixinFn<CustomLevels>;\n customLevels?: { [level in CustomLevels]: number };\n /**\n * When false, disables pino-pretty and outputs raw JSON.\n * Useful when sending logs to aggregators like Datadog,\n * Loki, or CloudWatch that expect single-line JSON per entry.\n * @default true\n */\n prettyPrint?: boolean;\n}\n\ninterface PinoLoggerInternalOptions<CustomLevels extends string = never> extends PinoLoggerOptions<CustomLevels> {\n /** @internal Used internally for child loggers */\n _logger?: pino.Logger<CustomLevels>;\n}\n\nexport class PinoLogger<CustomLevels extends string = never> extends MastraLogger {\n protected logger: pino.Logger<CustomLevels>;\n\n constructor(options: PinoLoggerOptions<CustomLevels> = {}) {\n super(options);\n\n const internalOptions = options as PinoLoggerInternalOptions<CustomLevels>;\n\n // If an existing pino logger is provided (for child loggers), use it directly\n if (internalOptions._logger) {\n this.logger = internalOptions._logger;\n return;\n }\n\n const shouldPrettyPrint = options.prettyPrint ?? true;\n let prettyStream: ReturnType<typeof pretty> | undefined = undefined;\n if (!options.overrideDefaultTransports && shouldPrettyPrint) {\n prettyStream = pretty({\n colorize: true,\n levelFirst: true,\n ignore: 'pid,hostname',\n colorizeObjects: true,\n translateTime: 'SYS:standard',\n singleLine: false,\n });\n }\n\n const transportsAry = [...this.getTransports().entries()];\n this.logger = pino(\n {\n name: options.name || 'app',\n level: options.level || LogLevel.INFO,\n formatters: options.formatters,\n redact: options.redact,\n mixin: options.mixin,\n customLevels: options.customLevels,\n },\n options.overrideDefaultTransports\n ? options?.transports?.default\n : transportsAry.length === 0\n ? prettyStream // undefined when prettyPrint:false → pino native JSON\n : pino.multistream([\n ...transportsAry.map(([, transport]) => ({\n stream: transport,\n level: options.level || LogLevel.INFO,\n })),\n ...(prettyStream // only add prettyStream to multistream if it exists\n ? [{ stream: prettyStream, level: options.level || LogLevel.INFO }]\n : []),\n ]),\n );\n }\n\n /**\n * Creates a child logger with additional bound context.\n * All logs from the child logger will include the bound context.\n *\n * @param bindings - Key-value pairs to include in all logs from this child logger\n * @returns A new PinoLogger instance with the bound context\n *\n * @example\n * ```typescript\n * const baseLogger = new PinoLogger({ name: 'MyApp' });\n *\n * // Create module-scoped logger\n * const serviceLogger = baseLogger.child({ module: 'UserService' });\n * serviceLogger.info('User created', { userId: '123' });\n * // Output includes: { module: 'UserService', userId: '123', msg: 'User created' }\n *\n * // Create request-scoped logger\n * const requestLogger = baseLogger.child({ requestId: req.id });\n * requestLogger.error('Request failed', { err: error });\n * // Output includes: { requestId: 'abc', msg: 'Request failed', err: {...} }\n * ```\n */\n child(bindings: Record<string, unknown>): PinoLogger<CustomLevels> {\n const childPino = this.logger.child(bindings);\n const childOptions: PinoLoggerInternalOptions<CustomLevels> = {\n name: this.name,\n level: this.level,\n transports: Object.fromEntries(this.transports),\n _logger: childPino,\n };\n return new PinoLogger(childOptions);\n }\n\n debug(message: string, args: Record<string, any> = {}): void {\n this.logger.debug(args, message);\n }\n\n info(message: string, args: Record<string, any> = {}): void {\n this.logger.info(args, message);\n }\n\n warn(message: string, args: Record<string, any> = {}): void {\n this.logger.warn(args, message);\n }\n\n error(message: string, args: Record<string, any> = {}): void {\n this.logger.error(args, message);\n }\n}\n"]}
package/dist/index.js CHANGED
@@ -30,7 +30,9 @@ var PinoLogger = class _PinoLogger extends MastraLogger {
30
30
  name: options.name || "app",
31
31
  level: options.level || LogLevel.INFO,
32
32
  formatters: options.formatters,
33
- redact: options.redact
33
+ redact: options.redact,
34
+ mixin: options.mixin,
35
+ customLevels: options.customLevels
34
36
  },
35
37
  options.overrideDefaultTransports ? options?.transports?.default : transportsAry.length === 0 ? prettyStream : pino.multistream([
36
38
  ...transportsAry.map(([, transport]) => ({
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/pino.ts"],"names":[],"mappings":"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","file":"index.js","sourcesContent":["import type { LoggerTransport } from '@mastra/core/logger';\nimport { LogLevel, MastraLogger } from '@mastra/core/logger';\nimport pino from 'pino';\nimport pretty from 'pino-pretty';\n\ntype TransportMap = Record<string, LoggerTransport>;\n\nexport type { LogLevel } from '@mastra/core/logger';\n\nexport interface PinoLoggerOptions {\n name?: string;\n level?: LogLevel;\n transports?: TransportMap;\n overrideDefaultTransports?: boolean;\n formatters?: pino.LoggerOptions['formatters'];\n redact?: pino.LoggerOptions['redact'];\n /**\n * When false, disables pino-pretty and outputs raw JSON.\n * Useful when sending logs to aggregators like Datadog,\n * Loki, or CloudWatch that expect single-line JSON per entry.\n * @default true\n */\n prettyPrint?: boolean;\n}\n\ninterface PinoLoggerInternalOptions extends PinoLoggerOptions {\n /** @internal Used internally for child loggers */\n _logger?: pino.Logger;\n}\n\nexport class PinoLogger extends MastraLogger {\n protected logger: pino.Logger;\n\n constructor(options: PinoLoggerOptions = {}) {\n super(options);\n\n const internalOptions = options as PinoLoggerInternalOptions;\n\n // If an existing pino logger is provided (for child loggers), use it directly\n if (internalOptions._logger) {\n this.logger = internalOptions._logger;\n return;\n }\n\n const shouldPrettyPrint = options.prettyPrint ?? true;\n let prettyStream: ReturnType<typeof pretty> | undefined = undefined;\n if (!options.overrideDefaultTransports && shouldPrettyPrint) {\n prettyStream = pretty({\n colorize: true,\n levelFirst: true,\n ignore: 'pid,hostname',\n colorizeObjects: true,\n translateTime: 'SYS:standard',\n singleLine: false,\n });\n }\n\n const transportsAry = [...this.getTransports().entries()];\n this.logger = pino(\n {\n name: options.name || 'app',\n level: options.level || LogLevel.INFO,\n formatters: options.formatters,\n redact: options.redact,\n },\n options.overrideDefaultTransports\n ? options?.transports?.default\n : transportsAry.length === 0\n ? prettyStream // undefined when prettyPrint:false → pino native JSON\n : pino.multistream([\n ...transportsAry.map(([, transport]) => ({\n stream: transport,\n level: options.level || LogLevel.INFO,\n })),\n ...(prettyStream // only add prettyStream to multistream if it exists\n ? [{ stream: prettyStream, level: options.level || LogLevel.INFO }]\n : []),\n ]),\n );\n }\n\n /**\n * Creates a child logger with additional bound context.\n * All logs from the child logger will include the bound context.\n *\n * @param bindings - Key-value pairs to include in all logs from this child logger\n * @returns A new PinoLogger instance with the bound context\n *\n * @example\n * ```typescript\n * const baseLogger = new PinoLogger({ name: 'MyApp' });\n *\n * // Create module-scoped logger\n * const serviceLogger = baseLogger.child({ module: 'UserService' });\n * serviceLogger.info('User created', { userId: '123' });\n * // Output includes: { module: 'UserService', userId: '123', msg: 'User created' }\n *\n * // Create request-scoped logger\n * const requestLogger = baseLogger.child({ requestId: req.id });\n * requestLogger.error('Request failed', { err: error });\n * // Output includes: { requestId: 'abc', msg: 'Request failed', err: {...} }\n * ```\n */\n child(bindings: Record<string, unknown>): PinoLogger {\n const childPino = this.logger.child(bindings);\n const childOptions: PinoLoggerInternalOptions = {\n name: this.name,\n level: this.level,\n transports: Object.fromEntries(this.transports),\n _logger: childPino,\n };\n return new PinoLogger(childOptions);\n }\n\n debug(message: string, args: Record<string, any> = {}): void {\n this.logger.debug(args, message);\n }\n\n info(message: string, args: Record<string, any> = {}): void {\n this.logger.info(args, message);\n }\n\n warn(message: string, args: Record<string, any> = {}): void {\n this.logger.warn(args, message);\n }\n\n error(message: string, args: Record<string, any> = {}): void {\n this.logger.error(args, message);\n }\n}\n"]}
1
+ {"version":3,"sources":["../src/pino.ts"],"names":[],"mappings":"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","file":"index.js","sourcesContent":["import type { LoggerTransport } from '@mastra/core/logger';\nimport { LogLevel, MastraLogger } from '@mastra/core/logger';\nimport pino from 'pino';\nimport pretty from 'pino-pretty';\n\ntype TransportMap = Record<string, LoggerTransport>;\n\nexport type { LogLevel } from '@mastra/core/logger';\n\nexport interface PinoLoggerOptions<CustomLevels extends string = never> {\n name?: string;\n level?: LogLevel;\n transports?: TransportMap;\n overrideDefaultTransports?: boolean;\n formatters?: pino.LoggerOptions['formatters'];\n redact?: pino.LoggerOptions['redact'];\n mixin?: pino.MixinFn<CustomLevels>;\n customLevels?: { [level in CustomLevels]: number };\n /**\n * When false, disables pino-pretty and outputs raw JSON.\n * Useful when sending logs to aggregators like Datadog,\n * Loki, or CloudWatch that expect single-line JSON per entry.\n * @default true\n */\n prettyPrint?: boolean;\n}\n\ninterface PinoLoggerInternalOptions<CustomLevels extends string = never> extends PinoLoggerOptions<CustomLevels> {\n /** @internal Used internally for child loggers */\n _logger?: pino.Logger<CustomLevels>;\n}\n\nexport class PinoLogger<CustomLevels extends string = never> extends MastraLogger {\n protected logger: pino.Logger<CustomLevels>;\n\n constructor(options: PinoLoggerOptions<CustomLevels> = {}) {\n super(options);\n\n const internalOptions = options as PinoLoggerInternalOptions<CustomLevels>;\n\n // If an existing pino logger is provided (for child loggers), use it directly\n if (internalOptions._logger) {\n this.logger = internalOptions._logger;\n return;\n }\n\n const shouldPrettyPrint = options.prettyPrint ?? true;\n let prettyStream: ReturnType<typeof pretty> | undefined = undefined;\n if (!options.overrideDefaultTransports && shouldPrettyPrint) {\n prettyStream = pretty({\n colorize: true,\n levelFirst: true,\n ignore: 'pid,hostname',\n colorizeObjects: true,\n translateTime: 'SYS:standard',\n singleLine: false,\n });\n }\n\n const transportsAry = [...this.getTransports().entries()];\n this.logger = pino(\n {\n name: options.name || 'app',\n level: options.level || LogLevel.INFO,\n formatters: options.formatters,\n redact: options.redact,\n mixin: options.mixin,\n customLevels: options.customLevels,\n },\n options.overrideDefaultTransports\n ? options?.transports?.default\n : transportsAry.length === 0\n ? prettyStream // undefined when prettyPrint:false → pino native JSON\n : pino.multistream([\n ...transportsAry.map(([, transport]) => ({\n stream: transport,\n level: options.level || LogLevel.INFO,\n })),\n ...(prettyStream // only add prettyStream to multistream if it exists\n ? [{ stream: prettyStream, level: options.level || LogLevel.INFO }]\n : []),\n ]),\n );\n }\n\n /**\n * Creates a child logger with additional bound context.\n * All logs from the child logger will include the bound context.\n *\n * @param bindings - Key-value pairs to include in all logs from this child logger\n * @returns A new PinoLogger instance with the bound context\n *\n * @example\n * ```typescript\n * const baseLogger = new PinoLogger({ name: 'MyApp' });\n *\n * // Create module-scoped logger\n * const serviceLogger = baseLogger.child({ module: 'UserService' });\n * serviceLogger.info('User created', { userId: '123' });\n * // Output includes: { module: 'UserService', userId: '123', msg: 'User created' }\n *\n * // Create request-scoped logger\n * const requestLogger = baseLogger.child({ requestId: req.id });\n * requestLogger.error('Request failed', { err: error });\n * // Output includes: { requestId: 'abc', msg: 'Request failed', err: {...} }\n * ```\n */\n child(bindings: Record<string, unknown>): PinoLogger<CustomLevels> {\n const childPino = this.logger.child(bindings);\n const childOptions: PinoLoggerInternalOptions<CustomLevels> = {\n name: this.name,\n level: this.level,\n transports: Object.fromEntries(this.transports),\n _logger: childPino,\n };\n return new PinoLogger(childOptions);\n }\n\n debug(message: string, args: Record<string, any> = {}): void {\n this.logger.debug(args, message);\n }\n\n info(message: string, args: Record<string, any> = {}): void {\n this.logger.info(args, message);\n }\n\n warn(message: string, args: Record<string, any> = {}): void {\n this.logger.warn(args, message);\n }\n\n error(message: string, args: Record<string, any> = {}): void {\n this.logger.error(args, message);\n }\n}\n"]}
package/dist/pino.d.ts CHANGED
@@ -3,13 +3,17 @@ import { LogLevel, MastraLogger } from '@mastra/core/logger';
3
3
  import pino from 'pino';
4
4
  type TransportMap = Record<string, LoggerTransport>;
5
5
  export type { LogLevel } from '@mastra/core/logger';
6
- export interface PinoLoggerOptions {
6
+ export interface PinoLoggerOptions<CustomLevels extends string = never> {
7
7
  name?: string;
8
8
  level?: LogLevel;
9
9
  transports?: TransportMap;
10
10
  overrideDefaultTransports?: boolean;
11
11
  formatters?: pino.LoggerOptions['formatters'];
12
12
  redact?: pino.LoggerOptions['redact'];
13
+ mixin?: pino.MixinFn<CustomLevels>;
14
+ customLevels?: {
15
+ [level in CustomLevels]: number;
16
+ };
13
17
  /**
14
18
  * When false, disables pino-pretty and outputs raw JSON.
15
19
  * Useful when sending logs to aggregators like Datadog,
@@ -18,9 +22,9 @@ export interface PinoLoggerOptions {
18
22
  */
19
23
  prettyPrint?: boolean;
20
24
  }
21
- export declare class PinoLogger extends MastraLogger {
22
- protected logger: pino.Logger;
23
- constructor(options?: PinoLoggerOptions);
25
+ export declare class PinoLogger<CustomLevels extends string = never> extends MastraLogger {
26
+ protected logger: pino.Logger<CustomLevels>;
27
+ constructor(options?: PinoLoggerOptions<CustomLevels>);
24
28
  /**
25
29
  * Creates a child logger with additional bound context.
26
30
  * All logs from the child logger will include the bound context.
@@ -43,7 +47,7 @@ export declare class PinoLogger extends MastraLogger {
43
47
  * // Output includes: { requestId: 'abc', msg: 'Request failed', err: {...} }
44
48
  * ```
45
49
  */
46
- child(bindings: Record<string, unknown>): PinoLogger;
50
+ child(bindings: Record<string, unknown>): PinoLogger<CustomLevels>;
47
51
  debug(message: string, args?: Record<string, any>): void;
48
52
  info(message: string, args?: Record<string, any>): void;
49
53
  warn(message: string, args?: Record<string, any>): void;
@@ -1 +1 @@
1
- {"version":3,"file":"pino.d.ts","sourceRoot":"","sources":["../src/pino.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;AAC3D,OAAO,EAAE,QAAQ,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AAC7D,OAAO,IAAI,MAAM,MAAM,CAAC;AAGxB,KAAK,YAAY,GAAG,MAAM,CAAC,MAAM,EAAE,eAAe,CAAC,CAAC;AAEpD,YAAY,EAAE,QAAQ,EAAE,MAAM,qBAAqB,CAAC;AAEpD,MAAM,WAAW,iBAAiB;IAChC,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,QAAQ,CAAC;IACjB,UAAU,CAAC,EAAE,YAAY,CAAC;IAC1B,yBAAyB,CAAC,EAAE,OAAO,CAAC;IACpC,UAAU,CAAC,EAAE,IAAI,CAAC,aAAa,CAAC,YAAY,CAAC,CAAC;IAC9C,MAAM,CAAC,EAAE,IAAI,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAC;IACtC;;;;;OAKG;IACH,WAAW,CAAC,EAAE,OAAO,CAAC;CACvB;AAOD,qBAAa,UAAW,SAAQ,YAAY;IAC1C,SAAS,CAAC,MAAM,EAAE,IAAI,CAAC,MAAM,CAAC;gBAElB,OAAO,GAAE,iBAAsB;IAgD3C;;;;;;;;;;;;;;;;;;;;;OAqBG;IACH,KAAK,CAAC,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,UAAU;IAWpD,KAAK,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,GAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAM,GAAG,IAAI;IAI5D,IAAI,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,GAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAM,GAAG,IAAI;IAI3D,IAAI,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,GAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAM,GAAG,IAAI;IAI3D,KAAK,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,GAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAM,GAAG,IAAI;CAG7D"}
1
+ {"version":3,"file":"pino.d.ts","sourceRoot":"","sources":["../src/pino.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;AAC3D,OAAO,EAAE,QAAQ,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AAC7D,OAAO,IAAI,MAAM,MAAM,CAAC;AAGxB,KAAK,YAAY,GAAG,MAAM,CAAC,MAAM,EAAE,eAAe,CAAC,CAAC;AAEpD,YAAY,EAAE,QAAQ,EAAE,MAAM,qBAAqB,CAAC;AAEpD,MAAM,WAAW,iBAAiB,CAAC,YAAY,SAAS,MAAM,GAAG,KAAK;IACpE,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,QAAQ,CAAC;IACjB,UAAU,CAAC,EAAE,YAAY,CAAC;IAC1B,yBAAyB,CAAC,EAAE,OAAO,CAAC;IACpC,UAAU,CAAC,EAAE,IAAI,CAAC,aAAa,CAAC,YAAY,CAAC,CAAC;IAC9C,MAAM,CAAC,EAAE,IAAI,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAC;IACtC,KAAK,CAAC,EAAE,IAAI,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC;IACnC,YAAY,CAAC,EAAE;SAAG,KAAK,IAAI,YAAY,GAAG,MAAM;KAAE,CAAC;IACnD;;;;;OAKG;IACH,WAAW,CAAC,EAAE,OAAO,CAAC;CACvB;AAOD,qBAAa,UAAU,CAAC,YAAY,SAAS,MAAM,GAAG,KAAK,CAAE,SAAQ,YAAY;IAC/E,SAAS,CAAC,MAAM,EAAE,IAAI,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC;gBAEhC,OAAO,GAAE,iBAAiB,CAAC,YAAY,CAAM;IAkDzD;;;;;;;;;;;;;;;;;;;;;OAqBG;IACH,KAAK,CAAC,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,UAAU,CAAC,YAAY,CAAC;IAWlE,KAAK,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,GAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAM,GAAG,IAAI;IAI5D,IAAI,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,GAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAM,GAAG,IAAI;IAI3D,IAAI,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,GAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAM,GAAG,IAAI;IAI3D,KAAK,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,GAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAM,GAAG,IAAI;CAG7D"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@mastra/loggers",
3
- "version": "1.0.3-alpha.0",
3
+ "version": "1.1.0-alpha.0",
4
4
  "description": "",
5
5
  "type": "module",
6
6
  "files": [
@@ -69,16 +69,16 @@
69
69
  "pino-pretty": "^13.1.3"
70
70
  },
71
71
  "devDependencies": {
72
- "@types/node": "22.19.13",
72
+ "@types/node": "22.19.15",
73
73
  "@vitest/coverage-v8": "4.0.18",
74
74
  "@vitest/ui": "4.0.18",
75
75
  "eslint": "^9.39.4",
76
76
  "tsup": "^8.5.1",
77
77
  "typescript": "^5.9.3",
78
78
  "vitest": "4.0.18",
79
- "@internal/lint": "0.0.71",
80
- "@internal/types-builder": "0.0.46",
81
- "@mastra/core": "1.13.3-alpha.0"
79
+ "@internal/lint": "0.0.74",
80
+ "@internal/types-builder": "0.0.49",
81
+ "@mastra/core": "1.18.0-alpha.2"
82
82
  },
83
83
  "peerDependencies": {
84
84
  "@mastra/core": ">=1.0.0-0 <2.0.0-0"