@we-are-singular/logger 2.0.0 → 2.1.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.
@@ -0,0 +1,26 @@
1
+ import { NestJSLoggerClass } from "./nestjs/LoggerService";
2
+ import { FastifyLoggerClass } from "./fastify/FastifyLoggerClass";
3
+ /**
4
+ * Factory methods for creating framework-specific logger instances
5
+ */
6
+ export declare class LoggerFactory {
7
+ /**
8
+ * Factory method to create a NestJS logger instance
9
+ * @param module Optional module name
10
+ * @returns NestJSLoggerClass instance
11
+ * @example
12
+ * const nestLogger = LoggerFactory.forNestJS("MyModule")
13
+ */
14
+ static forNestJS(module?: string): NestJSLoggerClass;
15
+ /**
16
+ * Factory method to create a Fastify logger instance
17
+ * @param app Optional app name
18
+ * @param module Optional module name
19
+ * @returns FastifyLoggerClass instance
20
+ * @example
21
+ * const fastifyLogger = LoggerFactory.forFastify("MyApp", "api")
22
+ * const app = fastify({ logger: fastifyLogger })
23
+ */
24
+ static forFastify(app?: string, module?: string): FastifyLoggerClass;
25
+ }
26
+ //# sourceMappingURL=LoggerFactory.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"LoggerFactory.d.ts","sourceRoot":"","sources":["../src/LoggerFactory.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAA;AAC1D,OAAO,EAAE,kBAAkB,EAAE,MAAM,8BAA8B,CAAA;AAEjE;;GAEG;AACH,qBAAa,aAAa;IACxB;;;;;;OAMG;IACH,MAAM,CAAC,SAAS,CAAC,MAAM,CAAC,EAAE,MAAM,GAAG,iBAAiB;IAKpD;;;;;;;;OAQG;IACH,MAAM,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,GAAG,kBAAkB;CAGrE"}
@@ -0,0 +1,35 @@
1
+ import type { FastifyBaseLogger } from "fastify";
2
+ /**
3
+ * Fastify logger class that implements FastifyBaseLogger interface
4
+ * @example
5
+ * const fastifyLogger = new FastifyLoggerClass("MyApp", "api")
6
+ * const app = fastify({ logger: fastifyLogger })
7
+ */
8
+ export declare class FastifyLoggerClass implements FastifyBaseLogger {
9
+ private logger;
10
+ level: string;
11
+ constructor(app?: string, module?: string, context?: string);
12
+ /**
13
+ * Create a child logger instance
14
+ * @returns New FastifyLoggerClass instance
15
+ */
16
+ child(): FastifyBaseLogger;
17
+ /**
18
+ * Helper method to handle log method arguments
19
+ */
20
+ private getLogArgs;
21
+ info(message: string | object, ...args: unknown[]): void;
22
+ info(obj: object, message?: string, ...args: unknown[]): void;
23
+ error(message: string | object, ...args: unknown[]): void;
24
+ error(obj: object, message?: string, ...args: unknown[]): void;
25
+ debug(message: string | object, ...args: unknown[]): void;
26
+ debug(obj: object, message?: string, ...args: unknown[]): void;
27
+ fatal(message: string | object, ...args: unknown[]): void;
28
+ fatal(obj: object, message?: string, ...args: unknown[]): void;
29
+ warn(message: string | object, ...args: unknown[]): void;
30
+ warn(obj: object, message?: string, ...args: unknown[]): void;
31
+ trace(message: string | object, ...args: unknown[]): void;
32
+ trace(obj: object, message?: string, ...args: unknown[]): void;
33
+ silent(): void;
34
+ }
35
+ //# sourceMappingURL=FastifyLoggerClass.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"FastifyLoggerClass.d.ts","sourceRoot":"","sources":["../../src/fastify/FastifyLoggerClass.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,SAAS,CAAA;AAGhD;;;;;GAKG;AACH,qBAAa,kBAAmB,YAAW,iBAAiB;IAC1D,OAAO,CAAC,MAAM,CAAa;IACpB,KAAK,EAAE,MAAM,CAAA;gBAER,GAAG,CAAC,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM;IAK3D;;;OAGG;IACH,KAAK,IAAI,iBAAiB;IAO1B;;OAEG;IACH,OAAO,CAAC,UAAU;IASlB,IAAI,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,EAAE,GAAG,IAAI,EAAE,OAAO,EAAE,GAAG,IAAI;IACxD,IAAI,CAAC,GAAG,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,EAAE,GAAG,IAAI,EAAE,OAAO,EAAE,GAAG,IAAI;IAM7D,KAAK,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,EAAE,GAAG,IAAI,EAAE,OAAO,EAAE,GAAG,IAAI;IACzD,KAAK,CAAC,GAAG,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,EAAE,GAAG,IAAI,EAAE,OAAO,EAAE,GAAG,IAAI;IAM9D,KAAK,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,EAAE,GAAG,IAAI,EAAE,OAAO,EAAE,GAAG,IAAI;IACzD,KAAK,CAAC,GAAG,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,EAAE,GAAG,IAAI,EAAE,OAAO,EAAE,GAAG,IAAI;IAM9D,KAAK,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,EAAE,GAAG,IAAI,EAAE,OAAO,EAAE,GAAG,IAAI;IACzD,KAAK,CAAC,GAAG,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,EAAE,GAAG,IAAI,EAAE,OAAO,EAAE,GAAG,IAAI;IAM9D,IAAI,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,EAAE,GAAG,IAAI,EAAE,OAAO,EAAE,GAAG,IAAI;IACxD,IAAI,CAAC,GAAG,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,EAAE,GAAG,IAAI,EAAE,OAAO,EAAE,GAAG,IAAI;IAM7D,KAAK,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,EAAE,GAAG,IAAI,EAAE,OAAO,EAAE,GAAG,IAAI;IACzD,KAAK,CAAC,GAAG,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,EAAE,GAAG,IAAI,EAAE,OAAO,EAAE,GAAG,IAAI;IAM9D,MAAM,IAAI,IAAI;CAGf"}
package/.build/index.cjs CHANGED
@@ -103,13 +103,13 @@ class LoggerClass {
103
103
  }
104
104
  }
105
105
 
106
- class LoggerService {
106
+ class NestJSLoggerClass {
107
107
  constructor(withLogger) {
108
108
  var _a;
109
109
  this.logger = withLogger !== null && withLogger !== void 0 ? withLogger : new LoggerClass();
110
110
  this.logger.pino.level = (_a = process.env.LOG_LEVEL) !== null && _a !== void 0 ? _a : "info";
111
111
  }
112
- static forFeature(module, useClass = LoggerService) {
112
+ static forFeature(module, useClass = NestJSLoggerClass) {
113
113
  return {
114
114
  provide: useClass,
115
115
  useFactory: () => new useClass().withModule(module),
@@ -137,10 +137,10 @@ class LoggerService {
137
137
  },
138
138
  };
139
139
  }
140
- withModule(module, useClass = LoggerService) {
140
+ withModule(module, useClass = NestJSLoggerClass) {
141
141
  return new useClass(this.logger.fork().setModule(module));
142
142
  }
143
- withContext(context, useClass = LoggerService) {
143
+ withContext(context, useClass = NestJSLoggerClass) {
144
144
  return new useClass(this.logger.fork().setContext(context));
145
145
  }
146
146
  log(msg, ...extra) {
@@ -159,8 +159,108 @@ class LoggerService {
159
159
  this.logger.trace(msg, ...extra);
160
160
  }
161
161
  }
162
+ /**
163
+ * @deprecated Use NestJSLoggerClass instead. This alias will be removed in a future version.
164
+ */
165
+ // eslint-disable-next-line @typescript-eslint/naming-convention
166
+ const LoggerService = NestJSLoggerClass;
167
+
168
+ /**
169
+ * Fastify logger class that implements FastifyBaseLogger interface
170
+ * @example
171
+ * const fastifyLogger = new FastifyLoggerClass("MyApp", "api")
172
+ * const app = fastify({ logger: fastifyLogger })
173
+ */
174
+ class FastifyLoggerClass {
175
+ constructor(app, module, context) {
176
+ var _a;
177
+ this.logger = new LoggerClass(app, module, context);
178
+ this.level = (_a = process.env.LOG_LEVEL) !== null && _a !== void 0 ? _a : "info";
179
+ }
180
+ /**
181
+ * Create a child logger instance
182
+ * @returns New FastifyLoggerClass instance
183
+ */
184
+ child() {
185
+ const childLogger = new FastifyLoggerClass();
186
+ childLogger.logger = this.logger.fork();
187
+ childLogger.level = this.level;
188
+ return childLogger;
189
+ }
190
+ /**
191
+ * Helper method to handle log method arguments
192
+ */
193
+ getLogArgs(msgOrObj, args) {
194
+ if (typeof msgOrObj === "string") {
195
+ return [msgOrObj, args.length > 0 ? args[0] : undefined];
196
+ }
197
+ else {
198
+ const message = typeof args[0] === "string" ? args[0] : JSON.stringify(msgOrObj);
199
+ return [message, msgOrObj];
200
+ }
201
+ }
202
+ info(msgOrObj, ...args) {
203
+ const [msg, data] = this.getLogArgs(msgOrObj, args);
204
+ this.logger.info(msg, data);
205
+ }
206
+ error(msgOrObj, ...args) {
207
+ const [msg, data] = this.getLogArgs(msgOrObj, args);
208
+ this.logger.error(msg, data);
209
+ }
210
+ debug(msgOrObj, ...args) {
211
+ const [msg, data] = this.getLogArgs(msgOrObj, args);
212
+ this.logger.debug(msg, data);
213
+ }
214
+ fatal(msgOrObj, ...args) {
215
+ const [msg, data] = this.getLogArgs(msgOrObj, args);
216
+ this.logger.fatal(msg, data);
217
+ }
218
+ warn(msgOrObj, ...args) {
219
+ const [msg, data] = this.getLogArgs(msgOrObj, args);
220
+ this.logger.warn(msg, data);
221
+ }
222
+ trace(msgOrObj, ...args) {
223
+ const [msg, data] = this.getLogArgs(msgOrObj, args);
224
+ this.logger.trace(msg, data);
225
+ }
226
+ silent() {
227
+ // No-op for silent level
228
+ }
229
+ }
230
+
231
+ /**
232
+ * Factory methods for creating framework-specific logger instances
233
+ */
234
+ class LoggerFactory {
235
+ /**
236
+ * Factory method to create a NestJS logger instance
237
+ * @param module Optional module name
238
+ * @returns NestJSLoggerClass instance
239
+ * @example
240
+ * const nestLogger = LoggerFactory.forNestJS("MyModule")
241
+ */
242
+ static forNestJS(module) {
243
+ const logger = new NestJSLoggerClass();
244
+ return module ? logger.withModule(module) : logger;
245
+ }
246
+ /**
247
+ * Factory method to create a Fastify logger instance
248
+ * @param app Optional app name
249
+ * @param module Optional module name
250
+ * @returns FastifyLoggerClass instance
251
+ * @example
252
+ * const fastifyLogger = LoggerFactory.forFastify("MyApp", "api")
253
+ * const app = fastify({ logger: fastifyLogger })
254
+ */
255
+ static forFastify(app, module) {
256
+ return new FastifyLoggerClass(app, module);
257
+ }
258
+ }
162
259
 
260
+ exports.FastifyLoggerClass = FastifyLoggerClass;
163
261
  exports.LoggerClass = LoggerClass;
262
+ exports.LoggerFactory = LoggerFactory;
164
263
  exports.LoggerService = LoggerService;
264
+ exports.NestJSLoggerClass = NestJSLoggerClass;
165
265
  exports.getLogger = getLogger;
166
266
  //# sourceMappingURL=index.cjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.cjs","sources":["../src/pino.instance.ts","../src/LoggerClass.ts","../src/nestjs/LoggerService.ts"],"sourcesContent":["import pino, { LoggerOptions, LogDescriptor, stdTimeFunctions, type Logger } from \"pino\"\nimport pretty from \"pino-pretty\"\n\nconst loggerOptions = {\n level: \"trace\",\n redact: [\"user.password\", \"options.token\"], // example of a redaction key\n timestamp: stdTimeFunctions.isoTime,\n} satisfies LoggerOptions\n\nconst loggerFactory = (): Logger => {\n if (process.env.NODE_ENV !== \"production\" || parseInt(process.env.LOG_HUMAN ?? \"\") === 1) {\n return pino(\n loggerOptions,\n pretty({\n minimumLevel: (process.env.LOG_LEVEL as pino.Level) ?? \"trace\",\n sync: process.env.NODE_ENV === \"test\",\n colorize: true,\n colorizeObjects: true,\n singleLine: false,\n ignore: \"pid,hostname,app,module,context\",\n customPrettifiers: {\n //pid: (log) => \"{log.pid}\",\n //app: (name) => name,\n },\n messageFormat: (log: LogDescriptor) => {\n const { app, module, context, messageKey = \"msg\" }: LogDescriptor = log\n return `[${[app, module, context].filter(Boolean).join(\"::\")}] ${\n // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access\n log[messageKey as keyof LogDescriptor]\n }`\n },\n })\n )\n }\n\n return pino({\n ...loggerOptions,\n level: process.env.LOG_LEVEL ?? \"info\",\n messageKey: \"message\",\n formatters: {\n level: (label) => {\n return { level: label }\n },\n },\n })\n}\n\n/**\n * Main logger instance\n */\nconst mainLogger = loggerFactory()\n\n/**\n * export the main logger instance\n */\nexport const getLogger = () => mainLogger\n","import { getLogger } from \"./pino.instance\"\n\n/**\n * Logger class\n * @param app\n * @param module\n * @param context\n * @constructor\n * @example\n * const logger = new Logger(\"test\")\n * logger.info(\"hello world\")\n * logger.addModule(\"some module\")\n * logger.info(\"hello world\", { user: { id: 1, name: \"John Doe\" } })\n */\nexport class LoggerClass {\n private app = \"\"\n private module = \"\"\n private context = \"\"\n public pino = getLogger()\n constructor(app?: string, module?: string, context?: string) {\n this.app = app ?? \"\"\n this.module = module ?? \"\"\n this.context = context ?? \"\"\n this.updateLogger()\n }\n\n private updateLogger() {\n this.pino = getLogger().child({\n ...(this.app && { app: this.app }),\n ...(this.module && { module: this.module }),\n ...(this.context && { context: this.context }),\n })\n\n return this\n }\n\n fork() {\n return new LoggerClass(this.app, this.module, this.context)\n }\n\n setModule(module: string) {\n this.module = module\n return this.updateLogger()\n }\n\n setContext(context: string) {\n this.context = context\n return this.updateLogger()\n }\n\n trace(message: string, data?: unknown) {\n this.pino.trace(data || null, message)\n }\n\n debug(message: string, data?: unknown) {\n this.pino.debug(data || null, message)\n }\n\n info(message: string, data?: unknown) {\n this.pino.info(data || null, message)\n }\n\n warn(message: string, data?: unknown) {\n this.pino.warn(data || null, message)\n }\n\n error(message: string, data?: unknown) {\n this.pino.error(data || null, message)\n }\n\n fatal(message: string, data?: unknown) {\n this.pino.fatal(data || null, message)\n }\n}\n","import { type LoggerService as NestLoggerService } from \"@nestjs/common\"\nimport { LoggerClass } from \"../LoggerClass\"\n\nexport class LoggerService {\n private logger: LoggerClass\n\n constructor(withLogger?: LoggerClass) {\n this.logger = withLogger ?? new LoggerClass()\n this.logger.pino.level = process.env.LOG_LEVEL ?? \"info\"\n }\n\n static forFeature(module: string, useClass: typeof LoggerService = LoggerService) {\n return {\n provide: useClass,\n useFactory: () => new useClass().withModule(module),\n }\n }\n\n /**\n * This is a workaround to create an interface complying to NestJS's LoggerService for internal logging\n */\n forRoot(): NestLoggerService {\n return {\n log: (msg, context: string, extra) => {\n this.logger.info(msg, { context, extra })\n },\n error: (msg, stack: unknown, context: string) => {\n this.logger.error(String(stack), { context, error: msg })\n },\n warn: (msg, context: string) => {\n this.logger.warn(msg, { context })\n },\n debug: (msg, context: string) => {\n this.logger.debug(msg, { context })\n },\n verbose: (msg, context: string) => {\n this.logger.trace(msg, { context })\n },\n }\n }\n\n withModule(module: string, useClass: typeof LoggerService = LoggerService) {\n return new useClass(this.logger.fork().setModule(module))\n }\n\n withContext(context: string, useClass: typeof LoggerService = LoggerService) {\n return new useClass(this.logger.fork().setContext(context))\n }\n\n log(msg: string, ...extra: unknown[]) {\n this.logger.info(msg, ...extra)\n }\n\n error(msg: string, ...extra: unknown[]) {\n this.logger.error(msg, ...extra)\n }\n\n warn(msg: string, ...extra: unknown[]) {\n this.logger.warn(msg, ...extra)\n }\n\n debug(msg: string, ...extra: unknown[]) {\n this.logger.debug(msg, ...extra)\n }\n\n verbose(msg: string, ...extra: unknown[]) {\n this.logger.trace(msg, ...extra)\n }\n}\n"],"names":["stdTimeFunctions"],"mappings":"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"}
1
+ {"version":3,"file":"index.cjs","sources":["../src/pino.instance.ts","../src/LoggerClass.ts","../src/nestjs/LoggerService.ts","../src/fastify/FastifyLoggerClass.ts","../src/LoggerFactory.ts"],"sourcesContent":["import pino, { LoggerOptions, LogDescriptor, stdTimeFunctions, type Logger } from \"pino\"\nimport pretty from \"pino-pretty\"\n\nconst loggerOptions = {\n level: \"trace\",\n redact: [\"user.password\", \"options.token\"], // example of a redaction key\n timestamp: stdTimeFunctions.isoTime,\n} satisfies LoggerOptions\n\nconst loggerFactory = (): Logger => {\n if (process.env.NODE_ENV !== \"production\" || parseInt(process.env.LOG_HUMAN ?? \"\") === 1) {\n return pino(\n loggerOptions,\n pretty({\n minimumLevel: (process.env.LOG_LEVEL as pino.Level) ?? \"trace\",\n sync: process.env.NODE_ENV === \"test\",\n colorize: true,\n colorizeObjects: true,\n singleLine: false,\n ignore: \"pid,hostname,app,module,context\",\n customPrettifiers: {\n //pid: (log) => \"{log.pid}\",\n //app: (name) => name,\n },\n messageFormat: (log: LogDescriptor) => {\n const { app, module, context, messageKey = \"msg\" }: LogDescriptor = log\n return `[${[app, module, context].filter(Boolean).join(\"::\")}] ${\n // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access\n log[messageKey as keyof LogDescriptor]\n }`\n },\n })\n )\n }\n\n return pino({\n ...loggerOptions,\n level: process.env.LOG_LEVEL ?? \"info\",\n messageKey: \"message\",\n formatters: {\n level: (label) => {\n return { level: label }\n },\n },\n })\n}\n\n/**\n * Main logger instance\n */\nconst mainLogger = loggerFactory()\n\n/**\n * export the main logger instance\n */\nexport const getLogger = () => mainLogger\n","import { getLogger } from \"./pino.instance\"\n\n/**\n * Logger class\n * @param app\n * @param module\n * @param context\n * @constructor\n * @example\n * const logger = new Logger(\"test\")\n * logger.info(\"hello world\")\n * logger.addModule(\"some module\")\n * logger.info(\"hello world\", { user: { id: 1, name: \"John Doe\" } })\n */\nexport class LoggerClass {\n private app = \"\"\n private module = \"\"\n private context = \"\"\n public pino = getLogger()\n constructor(app?: string, module?: string, context?: string) {\n this.app = app ?? \"\"\n this.module = module ?? \"\"\n this.context = context ?? \"\"\n this.updateLogger()\n }\n\n private updateLogger() {\n this.pino = getLogger().child({\n ...(this.app && { app: this.app }),\n ...(this.module && { module: this.module }),\n ...(this.context && { context: this.context }),\n })\n\n return this\n }\n\n fork() {\n return new LoggerClass(this.app, this.module, this.context)\n }\n\n setModule(module: string) {\n this.module = module\n return this.updateLogger()\n }\n\n setContext(context: string) {\n this.context = context\n return this.updateLogger()\n }\n\n trace(message: string, data?: unknown) {\n this.pino.trace(data || null, message)\n }\n\n debug(message: string, data?: unknown) {\n this.pino.debug(data || null, message)\n }\n\n info(message: string, data?: unknown) {\n this.pino.info(data || null, message)\n }\n\n warn(message: string, data?: unknown) {\n this.pino.warn(data || null, message)\n }\n\n error(message: string, data?: unknown) {\n this.pino.error(data || null, message)\n }\n\n fatal(message: string, data?: unknown) {\n this.pino.fatal(data || null, message)\n }\n}\n","import { type LoggerService as NestLoggerService } from \"@nestjs/common\"\nimport { LoggerClass } from \"../LoggerClass\"\n\nexport class NestJSLoggerClass {\n private logger: LoggerClass\n\n constructor(withLogger?: LoggerClass) {\n this.logger = withLogger ?? new LoggerClass()\n this.logger.pino.level = process.env.LOG_LEVEL ?? \"info\"\n }\n\n static forFeature(module: string, useClass: typeof NestJSLoggerClass = NestJSLoggerClass) {\n return {\n provide: useClass,\n useFactory: () => new useClass().withModule(module),\n }\n }\n\n /**\n * This is a workaround to create an interface complying to NestJS's LoggerService for internal logging\n */\n forRoot(): NestLoggerService {\n return {\n log: (msg, context: string, extra) => {\n this.logger.info(msg, { context, extra })\n },\n error: (msg, stack: unknown, context: string) => {\n this.logger.error(String(stack), { context, error: msg })\n },\n warn: (msg, context: string) => {\n this.logger.warn(msg, { context })\n },\n debug: (msg, context: string) => {\n this.logger.debug(msg, { context })\n },\n verbose: (msg, context: string) => {\n this.logger.trace(msg, { context })\n },\n }\n }\n\n withModule(module: string, useClass: typeof NestJSLoggerClass = NestJSLoggerClass) {\n return new useClass(this.logger.fork().setModule(module))\n }\n\n withContext(context: string, useClass: typeof NestJSLoggerClass = NestJSLoggerClass) {\n return new useClass(this.logger.fork().setContext(context))\n }\n\n log(msg: string, ...extra: unknown[]) {\n this.logger.info(msg, ...extra)\n }\n\n error(msg: string, ...extra: unknown[]) {\n this.logger.error(msg, ...extra)\n }\n\n warn(msg: string, ...extra: unknown[]) {\n this.logger.warn(msg, ...extra)\n }\n\n debug(msg: string, ...extra: unknown[]) {\n this.logger.debug(msg, ...extra)\n }\n\n verbose(msg: string, ...extra: unknown[]) {\n this.logger.trace(msg, ...extra)\n }\n}\n\n/**\n * @deprecated Use NestJSLoggerClass instead. This alias will be removed in a future version.\n */\n// eslint-disable-next-line @typescript-eslint/naming-convention\nexport const LoggerService = NestJSLoggerClass\n","import type { FastifyBaseLogger } from \"fastify\"\nimport { LoggerClass } from \"../LoggerClass\"\n\n/**\n * Fastify logger class that implements FastifyBaseLogger interface\n * @example\n * const fastifyLogger = new FastifyLoggerClass(\"MyApp\", \"api\")\n * const app = fastify({ logger: fastifyLogger })\n */\nexport class FastifyLoggerClass implements FastifyBaseLogger {\n private logger: LoggerClass\n public level: string\n\n constructor(app?: string, module?: string, context?: string) {\n this.logger = new LoggerClass(app, module, context)\n this.level = process.env.LOG_LEVEL ?? \"info\"\n }\n\n /**\n * Create a child logger instance\n * @returns New FastifyLoggerClass instance\n */\n child(): FastifyBaseLogger {\n const childLogger = new FastifyLoggerClass()\n childLogger.logger = this.logger.fork()\n childLogger.level = this.level\n return childLogger\n }\n\n /**\n * Helper method to handle log method arguments\n */\n private getLogArgs(msgOrObj: string | object, args: unknown[]): [string, unknown?] {\n if (typeof msgOrObj === \"string\") {\n return [msgOrObj, args.length > 0 ? args[0] : undefined]\n } else {\n const message = typeof args[0] === \"string\" ? args[0] : JSON.stringify(msgOrObj)\n return [message, msgOrObj]\n }\n }\n\n info(message: string | object, ...args: unknown[]): void\n info(obj: object, message?: string, ...args: unknown[]): void\n info(msgOrObj: string | object, ...args: unknown[]): void {\n const [msg, data] = this.getLogArgs(msgOrObj, args)\n this.logger.info(msg, data)\n }\n\n error(message: string | object, ...args: unknown[]): void\n error(obj: object, message?: string, ...args: unknown[]): void\n error(msgOrObj: string | object, ...args: unknown[]): void {\n const [msg, data] = this.getLogArgs(msgOrObj, args)\n this.logger.error(msg, data)\n }\n\n debug(message: string | object, ...args: unknown[]): void\n debug(obj: object, message?: string, ...args: unknown[]): void\n debug(msgOrObj: string | object, ...args: unknown[]): void {\n const [msg, data] = this.getLogArgs(msgOrObj, args)\n this.logger.debug(msg, data)\n }\n\n fatal(message: string | object, ...args: unknown[]): void\n fatal(obj: object, message?: string, ...args: unknown[]): void\n fatal(msgOrObj: string | object, ...args: unknown[]): void {\n const [msg, data] = this.getLogArgs(msgOrObj, args)\n this.logger.fatal(msg, data)\n }\n\n warn(message: string | object, ...args: unknown[]): void\n warn(obj: object, message?: string, ...args: unknown[]): void\n warn(msgOrObj: string | object, ...args: unknown[]): void {\n const [msg, data] = this.getLogArgs(msgOrObj, args)\n this.logger.warn(msg, data)\n }\n\n trace(message: string | object, ...args: unknown[]): void\n trace(obj: object, message?: string, ...args: unknown[]): void\n trace(msgOrObj: string | object, ...args: unknown[]): void {\n const [msg, data] = this.getLogArgs(msgOrObj, args)\n this.logger.trace(msg, data)\n }\n\n silent(): void {\n // No-op for silent level\n }\n}\n","import { NestJSLoggerClass } from \"./nestjs/LoggerService\"\nimport { FastifyLoggerClass } from \"./fastify/FastifyLoggerClass\"\n\n/**\n * Factory methods for creating framework-specific logger instances\n */\nexport class LoggerFactory {\n /**\n * Factory method to create a NestJS logger instance\n * @param module Optional module name\n * @returns NestJSLoggerClass instance\n * @example\n * const nestLogger = LoggerFactory.forNestJS(\"MyModule\")\n */\n static forNestJS(module?: string): NestJSLoggerClass {\n const logger = new NestJSLoggerClass()\n return module ? logger.withModule(module) : logger\n }\n\n /**\n * Factory method to create a Fastify logger instance\n * @param app Optional app name\n * @param module Optional module name\n * @returns FastifyLoggerClass instance\n * @example\n * const fastifyLogger = LoggerFactory.forFastify(\"MyApp\", \"api\")\n * const app = fastify({ logger: fastifyLogger })\n */\n static forFastify(app?: string, module?: string): FastifyLoggerClass {\n return new FastifyLoggerClass(app, module)\n }\n}\n"],"names":["stdTimeFunctions"],"mappings":"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"}
package/.build/index.d.ts CHANGED
@@ -1,4 +1,6 @@
1
1
  export { getLogger } from "./pino.instance";
2
- export { LoggerService } from "./nestjs/LoggerService";
2
+ export { LoggerService, NestJSLoggerClass } from "./nestjs/LoggerService";
3
+ export { FastifyLoggerClass } from "./fastify/FastifyLoggerClass";
3
4
  export { LoggerClass } from "./LoggerClass";
5
+ export { LoggerFactory } from "./LoggerFactory";
4
6
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAA;AAC3C,OAAO,EAAE,aAAa,EAAE,MAAM,wBAAwB,CAAA;AACtD,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAA"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAA;AAC3C,OAAO,EAAE,aAAa,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAA;AACzE,OAAO,EAAE,kBAAkB,EAAE,MAAM,8BAA8B,CAAA;AACjE,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAA;AAC3C,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAA"}
package/.build/index.mjs CHANGED
@@ -101,13 +101,13 @@ class LoggerClass {
101
101
  }
102
102
  }
103
103
 
104
- class LoggerService {
104
+ class NestJSLoggerClass {
105
105
  constructor(withLogger) {
106
106
  var _a;
107
107
  this.logger = withLogger !== null && withLogger !== void 0 ? withLogger : new LoggerClass();
108
108
  this.logger.pino.level = (_a = process.env.LOG_LEVEL) !== null && _a !== void 0 ? _a : "info";
109
109
  }
110
- static forFeature(module, useClass = LoggerService) {
110
+ static forFeature(module, useClass = NestJSLoggerClass) {
111
111
  return {
112
112
  provide: useClass,
113
113
  useFactory: () => new useClass().withModule(module),
@@ -135,10 +135,10 @@ class LoggerService {
135
135
  },
136
136
  };
137
137
  }
138
- withModule(module, useClass = LoggerService) {
138
+ withModule(module, useClass = NestJSLoggerClass) {
139
139
  return new useClass(this.logger.fork().setModule(module));
140
140
  }
141
- withContext(context, useClass = LoggerService) {
141
+ withContext(context, useClass = NestJSLoggerClass) {
142
142
  return new useClass(this.logger.fork().setContext(context));
143
143
  }
144
144
  log(msg, ...extra) {
@@ -157,6 +157,103 @@ class LoggerService {
157
157
  this.logger.trace(msg, ...extra);
158
158
  }
159
159
  }
160
+ /**
161
+ * @deprecated Use NestJSLoggerClass instead. This alias will be removed in a future version.
162
+ */
163
+ // eslint-disable-next-line @typescript-eslint/naming-convention
164
+ const LoggerService = NestJSLoggerClass;
165
+
166
+ /**
167
+ * Fastify logger class that implements FastifyBaseLogger interface
168
+ * @example
169
+ * const fastifyLogger = new FastifyLoggerClass("MyApp", "api")
170
+ * const app = fastify({ logger: fastifyLogger })
171
+ */
172
+ class FastifyLoggerClass {
173
+ constructor(app, module, context) {
174
+ var _a;
175
+ this.logger = new LoggerClass(app, module, context);
176
+ this.level = (_a = process.env.LOG_LEVEL) !== null && _a !== void 0 ? _a : "info";
177
+ }
178
+ /**
179
+ * Create a child logger instance
180
+ * @returns New FastifyLoggerClass instance
181
+ */
182
+ child() {
183
+ const childLogger = new FastifyLoggerClass();
184
+ childLogger.logger = this.logger.fork();
185
+ childLogger.level = this.level;
186
+ return childLogger;
187
+ }
188
+ /**
189
+ * Helper method to handle log method arguments
190
+ */
191
+ getLogArgs(msgOrObj, args) {
192
+ if (typeof msgOrObj === "string") {
193
+ return [msgOrObj, args.length > 0 ? args[0] : undefined];
194
+ }
195
+ else {
196
+ const message = typeof args[0] === "string" ? args[0] : JSON.stringify(msgOrObj);
197
+ return [message, msgOrObj];
198
+ }
199
+ }
200
+ info(msgOrObj, ...args) {
201
+ const [msg, data] = this.getLogArgs(msgOrObj, args);
202
+ this.logger.info(msg, data);
203
+ }
204
+ error(msgOrObj, ...args) {
205
+ const [msg, data] = this.getLogArgs(msgOrObj, args);
206
+ this.logger.error(msg, data);
207
+ }
208
+ debug(msgOrObj, ...args) {
209
+ const [msg, data] = this.getLogArgs(msgOrObj, args);
210
+ this.logger.debug(msg, data);
211
+ }
212
+ fatal(msgOrObj, ...args) {
213
+ const [msg, data] = this.getLogArgs(msgOrObj, args);
214
+ this.logger.fatal(msg, data);
215
+ }
216
+ warn(msgOrObj, ...args) {
217
+ const [msg, data] = this.getLogArgs(msgOrObj, args);
218
+ this.logger.warn(msg, data);
219
+ }
220
+ trace(msgOrObj, ...args) {
221
+ const [msg, data] = this.getLogArgs(msgOrObj, args);
222
+ this.logger.trace(msg, data);
223
+ }
224
+ silent() {
225
+ // No-op for silent level
226
+ }
227
+ }
228
+
229
+ /**
230
+ * Factory methods for creating framework-specific logger instances
231
+ */
232
+ class LoggerFactory {
233
+ /**
234
+ * Factory method to create a NestJS logger instance
235
+ * @param module Optional module name
236
+ * @returns NestJSLoggerClass instance
237
+ * @example
238
+ * const nestLogger = LoggerFactory.forNestJS("MyModule")
239
+ */
240
+ static forNestJS(module) {
241
+ const logger = new NestJSLoggerClass();
242
+ return module ? logger.withModule(module) : logger;
243
+ }
244
+ /**
245
+ * Factory method to create a Fastify logger instance
246
+ * @param app Optional app name
247
+ * @param module Optional module name
248
+ * @returns FastifyLoggerClass instance
249
+ * @example
250
+ * const fastifyLogger = LoggerFactory.forFastify("MyApp", "api")
251
+ * const app = fastify({ logger: fastifyLogger })
252
+ */
253
+ static forFastify(app, module) {
254
+ return new FastifyLoggerClass(app, module);
255
+ }
256
+ }
160
257
 
161
- export { LoggerClass, LoggerService, getLogger };
258
+ export { FastifyLoggerClass, LoggerClass, LoggerFactory, LoggerService, NestJSLoggerClass, getLogger };
162
259
  //# sourceMappingURL=index.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.mjs","sources":["../src/pino.instance.ts","../src/LoggerClass.ts","../src/nestjs/LoggerService.ts"],"sourcesContent":["import pino, { LoggerOptions, LogDescriptor, stdTimeFunctions, type Logger } from \"pino\"\nimport pretty from \"pino-pretty\"\n\nconst loggerOptions = {\n level: \"trace\",\n redact: [\"user.password\", \"options.token\"], // example of a redaction key\n timestamp: stdTimeFunctions.isoTime,\n} satisfies LoggerOptions\n\nconst loggerFactory = (): Logger => {\n if (process.env.NODE_ENV !== \"production\" || parseInt(process.env.LOG_HUMAN ?? \"\") === 1) {\n return pino(\n loggerOptions,\n pretty({\n minimumLevel: (process.env.LOG_LEVEL as pino.Level) ?? \"trace\",\n sync: process.env.NODE_ENV === \"test\",\n colorize: true,\n colorizeObjects: true,\n singleLine: false,\n ignore: \"pid,hostname,app,module,context\",\n customPrettifiers: {\n //pid: (log) => \"{log.pid}\",\n //app: (name) => name,\n },\n messageFormat: (log: LogDescriptor) => {\n const { app, module, context, messageKey = \"msg\" }: LogDescriptor = log\n return `[${[app, module, context].filter(Boolean).join(\"::\")}] ${\n // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access\n log[messageKey as keyof LogDescriptor]\n }`\n },\n })\n )\n }\n\n return pino({\n ...loggerOptions,\n level: process.env.LOG_LEVEL ?? \"info\",\n messageKey: \"message\",\n formatters: {\n level: (label) => {\n return { level: label }\n },\n },\n })\n}\n\n/**\n * Main logger instance\n */\nconst mainLogger = loggerFactory()\n\n/**\n * export the main logger instance\n */\nexport const getLogger = () => mainLogger\n","import { getLogger } from \"./pino.instance\"\n\n/**\n * Logger class\n * @param app\n * @param module\n * @param context\n * @constructor\n * @example\n * const logger = new Logger(\"test\")\n * logger.info(\"hello world\")\n * logger.addModule(\"some module\")\n * logger.info(\"hello world\", { user: { id: 1, name: \"John Doe\" } })\n */\nexport class LoggerClass {\n private app = \"\"\n private module = \"\"\n private context = \"\"\n public pino = getLogger()\n constructor(app?: string, module?: string, context?: string) {\n this.app = app ?? \"\"\n this.module = module ?? \"\"\n this.context = context ?? \"\"\n this.updateLogger()\n }\n\n private updateLogger() {\n this.pino = getLogger().child({\n ...(this.app && { app: this.app }),\n ...(this.module && { module: this.module }),\n ...(this.context && { context: this.context }),\n })\n\n return this\n }\n\n fork() {\n return new LoggerClass(this.app, this.module, this.context)\n }\n\n setModule(module: string) {\n this.module = module\n return this.updateLogger()\n }\n\n setContext(context: string) {\n this.context = context\n return this.updateLogger()\n }\n\n trace(message: string, data?: unknown) {\n this.pino.trace(data || null, message)\n }\n\n debug(message: string, data?: unknown) {\n this.pino.debug(data || null, message)\n }\n\n info(message: string, data?: unknown) {\n this.pino.info(data || null, message)\n }\n\n warn(message: string, data?: unknown) {\n this.pino.warn(data || null, message)\n }\n\n error(message: string, data?: unknown) {\n this.pino.error(data || null, message)\n }\n\n fatal(message: string, data?: unknown) {\n this.pino.fatal(data || null, message)\n }\n}\n","import { type LoggerService as NestLoggerService } from \"@nestjs/common\"\nimport { LoggerClass } from \"../LoggerClass\"\n\nexport class LoggerService {\n private logger: LoggerClass\n\n constructor(withLogger?: LoggerClass) {\n this.logger = withLogger ?? new LoggerClass()\n this.logger.pino.level = process.env.LOG_LEVEL ?? \"info\"\n }\n\n static forFeature(module: string, useClass: typeof LoggerService = LoggerService) {\n return {\n provide: useClass,\n useFactory: () => new useClass().withModule(module),\n }\n }\n\n /**\n * This is a workaround to create an interface complying to NestJS's LoggerService for internal logging\n */\n forRoot(): NestLoggerService {\n return {\n log: (msg, context: string, extra) => {\n this.logger.info(msg, { context, extra })\n },\n error: (msg, stack: unknown, context: string) => {\n this.logger.error(String(stack), { context, error: msg })\n },\n warn: (msg, context: string) => {\n this.logger.warn(msg, { context })\n },\n debug: (msg, context: string) => {\n this.logger.debug(msg, { context })\n },\n verbose: (msg, context: string) => {\n this.logger.trace(msg, { context })\n },\n }\n }\n\n withModule(module: string, useClass: typeof LoggerService = LoggerService) {\n return new useClass(this.logger.fork().setModule(module))\n }\n\n withContext(context: string, useClass: typeof LoggerService = LoggerService) {\n return new useClass(this.logger.fork().setContext(context))\n }\n\n log(msg: string, ...extra: unknown[]) {\n this.logger.info(msg, ...extra)\n }\n\n error(msg: string, ...extra: unknown[]) {\n this.logger.error(msg, ...extra)\n }\n\n warn(msg: string, ...extra: unknown[]) {\n this.logger.warn(msg, ...extra)\n }\n\n debug(msg: string, ...extra: unknown[]) {\n this.logger.debug(msg, ...extra)\n }\n\n verbose(msg: string, ...extra: unknown[]) {\n this.logger.trace(msg, ...extra)\n }\n}\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.mjs","sources":["../src/pino.instance.ts","../src/LoggerClass.ts","../src/nestjs/LoggerService.ts","../src/fastify/FastifyLoggerClass.ts","../src/LoggerFactory.ts"],"sourcesContent":["import pino, { LoggerOptions, LogDescriptor, stdTimeFunctions, type Logger } from \"pino\"\nimport pretty from \"pino-pretty\"\n\nconst loggerOptions = {\n level: \"trace\",\n redact: [\"user.password\", \"options.token\"], // example of a redaction key\n timestamp: stdTimeFunctions.isoTime,\n} satisfies LoggerOptions\n\nconst loggerFactory = (): Logger => {\n if (process.env.NODE_ENV !== \"production\" || parseInt(process.env.LOG_HUMAN ?? \"\") === 1) {\n return pino(\n loggerOptions,\n pretty({\n minimumLevel: (process.env.LOG_LEVEL as pino.Level) ?? \"trace\",\n sync: process.env.NODE_ENV === \"test\",\n colorize: true,\n colorizeObjects: true,\n singleLine: false,\n ignore: \"pid,hostname,app,module,context\",\n customPrettifiers: {\n //pid: (log) => \"{log.pid}\",\n //app: (name) => name,\n },\n messageFormat: (log: LogDescriptor) => {\n const { app, module, context, messageKey = \"msg\" }: LogDescriptor = log\n return `[${[app, module, context].filter(Boolean).join(\"::\")}] ${\n // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access\n log[messageKey as keyof LogDescriptor]\n }`\n },\n })\n )\n }\n\n return pino({\n ...loggerOptions,\n level: process.env.LOG_LEVEL ?? \"info\",\n messageKey: \"message\",\n formatters: {\n level: (label) => {\n return { level: label }\n },\n },\n })\n}\n\n/**\n * Main logger instance\n */\nconst mainLogger = loggerFactory()\n\n/**\n * export the main logger instance\n */\nexport const getLogger = () => mainLogger\n","import { getLogger } from \"./pino.instance\"\n\n/**\n * Logger class\n * @param app\n * @param module\n * @param context\n * @constructor\n * @example\n * const logger = new Logger(\"test\")\n * logger.info(\"hello world\")\n * logger.addModule(\"some module\")\n * logger.info(\"hello world\", { user: { id: 1, name: \"John Doe\" } })\n */\nexport class LoggerClass {\n private app = \"\"\n private module = \"\"\n private context = \"\"\n public pino = getLogger()\n constructor(app?: string, module?: string, context?: string) {\n this.app = app ?? \"\"\n this.module = module ?? \"\"\n this.context = context ?? \"\"\n this.updateLogger()\n }\n\n private updateLogger() {\n this.pino = getLogger().child({\n ...(this.app && { app: this.app }),\n ...(this.module && { module: this.module }),\n ...(this.context && { context: this.context }),\n })\n\n return this\n }\n\n fork() {\n return new LoggerClass(this.app, this.module, this.context)\n }\n\n setModule(module: string) {\n this.module = module\n return this.updateLogger()\n }\n\n setContext(context: string) {\n this.context = context\n return this.updateLogger()\n }\n\n trace(message: string, data?: unknown) {\n this.pino.trace(data || null, message)\n }\n\n debug(message: string, data?: unknown) {\n this.pino.debug(data || null, message)\n }\n\n info(message: string, data?: unknown) {\n this.pino.info(data || null, message)\n }\n\n warn(message: string, data?: unknown) {\n this.pino.warn(data || null, message)\n }\n\n error(message: string, data?: unknown) {\n this.pino.error(data || null, message)\n }\n\n fatal(message: string, data?: unknown) {\n this.pino.fatal(data || null, message)\n }\n}\n","import { type LoggerService as NestLoggerService } from \"@nestjs/common\"\nimport { LoggerClass } from \"../LoggerClass\"\n\nexport class NestJSLoggerClass {\n private logger: LoggerClass\n\n constructor(withLogger?: LoggerClass) {\n this.logger = withLogger ?? new LoggerClass()\n this.logger.pino.level = process.env.LOG_LEVEL ?? \"info\"\n }\n\n static forFeature(module: string, useClass: typeof NestJSLoggerClass = NestJSLoggerClass) {\n return {\n provide: useClass,\n useFactory: () => new useClass().withModule(module),\n }\n }\n\n /**\n * This is a workaround to create an interface complying to NestJS's LoggerService for internal logging\n */\n forRoot(): NestLoggerService {\n return {\n log: (msg, context: string, extra) => {\n this.logger.info(msg, { context, extra })\n },\n error: (msg, stack: unknown, context: string) => {\n this.logger.error(String(stack), { context, error: msg })\n },\n warn: (msg, context: string) => {\n this.logger.warn(msg, { context })\n },\n debug: (msg, context: string) => {\n this.logger.debug(msg, { context })\n },\n verbose: (msg, context: string) => {\n this.logger.trace(msg, { context })\n },\n }\n }\n\n withModule(module: string, useClass: typeof NestJSLoggerClass = NestJSLoggerClass) {\n return new useClass(this.logger.fork().setModule(module))\n }\n\n withContext(context: string, useClass: typeof NestJSLoggerClass = NestJSLoggerClass) {\n return new useClass(this.logger.fork().setContext(context))\n }\n\n log(msg: string, ...extra: unknown[]) {\n this.logger.info(msg, ...extra)\n }\n\n error(msg: string, ...extra: unknown[]) {\n this.logger.error(msg, ...extra)\n }\n\n warn(msg: string, ...extra: unknown[]) {\n this.logger.warn(msg, ...extra)\n }\n\n debug(msg: string, ...extra: unknown[]) {\n this.logger.debug(msg, ...extra)\n }\n\n verbose(msg: string, ...extra: unknown[]) {\n this.logger.trace(msg, ...extra)\n }\n}\n\n/**\n * @deprecated Use NestJSLoggerClass instead. This alias will be removed in a future version.\n */\n// eslint-disable-next-line @typescript-eslint/naming-convention\nexport const LoggerService = NestJSLoggerClass\n","import type { FastifyBaseLogger } from \"fastify\"\nimport { LoggerClass } from \"../LoggerClass\"\n\n/**\n * Fastify logger class that implements FastifyBaseLogger interface\n * @example\n * const fastifyLogger = new FastifyLoggerClass(\"MyApp\", \"api\")\n * const app = fastify({ logger: fastifyLogger })\n */\nexport class FastifyLoggerClass implements FastifyBaseLogger {\n private logger: LoggerClass\n public level: string\n\n constructor(app?: string, module?: string, context?: string) {\n this.logger = new LoggerClass(app, module, context)\n this.level = process.env.LOG_LEVEL ?? \"info\"\n }\n\n /**\n * Create a child logger instance\n * @returns New FastifyLoggerClass instance\n */\n child(): FastifyBaseLogger {\n const childLogger = new FastifyLoggerClass()\n childLogger.logger = this.logger.fork()\n childLogger.level = this.level\n return childLogger\n }\n\n /**\n * Helper method to handle log method arguments\n */\n private getLogArgs(msgOrObj: string | object, args: unknown[]): [string, unknown?] {\n if (typeof msgOrObj === \"string\") {\n return [msgOrObj, args.length > 0 ? args[0] : undefined]\n } else {\n const message = typeof args[0] === \"string\" ? args[0] : JSON.stringify(msgOrObj)\n return [message, msgOrObj]\n }\n }\n\n info(message: string | object, ...args: unknown[]): void\n info(obj: object, message?: string, ...args: unknown[]): void\n info(msgOrObj: string | object, ...args: unknown[]): void {\n const [msg, data] = this.getLogArgs(msgOrObj, args)\n this.logger.info(msg, data)\n }\n\n error(message: string | object, ...args: unknown[]): void\n error(obj: object, message?: string, ...args: unknown[]): void\n error(msgOrObj: string | object, ...args: unknown[]): void {\n const [msg, data] = this.getLogArgs(msgOrObj, args)\n this.logger.error(msg, data)\n }\n\n debug(message: string | object, ...args: unknown[]): void\n debug(obj: object, message?: string, ...args: unknown[]): void\n debug(msgOrObj: string | object, ...args: unknown[]): void {\n const [msg, data] = this.getLogArgs(msgOrObj, args)\n this.logger.debug(msg, data)\n }\n\n fatal(message: string | object, ...args: unknown[]): void\n fatal(obj: object, message?: string, ...args: unknown[]): void\n fatal(msgOrObj: string | object, ...args: unknown[]): void {\n const [msg, data] = this.getLogArgs(msgOrObj, args)\n this.logger.fatal(msg, data)\n }\n\n warn(message: string | object, ...args: unknown[]): void\n warn(obj: object, message?: string, ...args: unknown[]): void\n warn(msgOrObj: string | object, ...args: unknown[]): void {\n const [msg, data] = this.getLogArgs(msgOrObj, args)\n this.logger.warn(msg, data)\n }\n\n trace(message: string | object, ...args: unknown[]): void\n trace(obj: object, message?: string, ...args: unknown[]): void\n trace(msgOrObj: string | object, ...args: unknown[]): void {\n const [msg, data] = this.getLogArgs(msgOrObj, args)\n this.logger.trace(msg, data)\n }\n\n silent(): void {\n // No-op for silent level\n }\n}\n","import { NestJSLoggerClass } from \"./nestjs/LoggerService\"\nimport { FastifyLoggerClass } from \"./fastify/FastifyLoggerClass\"\n\n/**\n * Factory methods for creating framework-specific logger instances\n */\nexport class LoggerFactory {\n /**\n * Factory method to create a NestJS logger instance\n * @param module Optional module name\n * @returns NestJSLoggerClass instance\n * @example\n * const nestLogger = LoggerFactory.forNestJS(\"MyModule\")\n */\n static forNestJS(module?: string): NestJSLoggerClass {\n const logger = new NestJSLoggerClass()\n return module ? logger.withModule(module) : logger\n }\n\n /**\n * Factory method to create a Fastify logger instance\n * @param app Optional app name\n * @param module Optional module name\n * @returns FastifyLoggerClass instance\n * @example\n * const fastifyLogger = LoggerFactory.forFastify(\"MyApp\", \"api\")\n * const app = fastify({ logger: fastifyLogger })\n */\n static forFastify(app?: string, module?: string): FastifyLoggerClass {\n return new FastifyLoggerClass(app, module)\n }\n}\n"],"names":[],"mappings":"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"}
@@ -1,22 +1,26 @@
1
1
  import { type LoggerService as NestLoggerService } from "@nestjs/common";
2
2
  import { LoggerClass } from "../LoggerClass";
3
- export declare class LoggerService {
3
+ export declare class NestJSLoggerClass {
4
4
  private logger;
5
5
  constructor(withLogger?: LoggerClass);
6
- static forFeature(module: string, useClass?: typeof LoggerService): {
7
- provide: typeof LoggerService;
8
- useFactory: () => LoggerService;
6
+ static forFeature(module: string, useClass?: typeof NestJSLoggerClass): {
7
+ provide: typeof NestJSLoggerClass;
8
+ useFactory: () => NestJSLoggerClass;
9
9
  };
10
10
  /**
11
11
  * This is a workaround to create an interface complying to NestJS's LoggerService for internal logging
12
12
  */
13
13
  forRoot(): NestLoggerService;
14
- withModule(module: string, useClass?: typeof LoggerService): LoggerService;
15
- withContext(context: string, useClass?: typeof LoggerService): LoggerService;
14
+ withModule(module: string, useClass?: typeof NestJSLoggerClass): NestJSLoggerClass;
15
+ withContext(context: string, useClass?: typeof NestJSLoggerClass): NestJSLoggerClass;
16
16
  log(msg: string, ...extra: unknown[]): void;
17
17
  error(msg: string, ...extra: unknown[]): void;
18
18
  warn(msg: string, ...extra: unknown[]): void;
19
19
  debug(msg: string, ...extra: unknown[]): void;
20
20
  verbose(msg: string, ...extra: unknown[]): void;
21
21
  }
22
+ /**
23
+ * @deprecated Use NestJSLoggerClass instead. This alias will be removed in a future version.
24
+ */
25
+ export declare const LoggerService: typeof NestJSLoggerClass;
22
26
  //# sourceMappingURL=LoggerService.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"LoggerService.d.ts","sourceRoot":"","sources":["../../src/nestjs/LoggerService.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,aAAa,IAAI,iBAAiB,EAAE,MAAM,gBAAgB,CAAA;AACxE,OAAO,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAA;AAE5C,qBAAa,aAAa;IACxB,OAAO,CAAC,MAAM,CAAa;gBAEf,UAAU,CAAC,EAAE,WAAW;IAKpC,MAAM,CAAC,UAAU,CAAC,MAAM,EAAE,MAAM,EAAE,QAAQ,GAAE,OAAO,aAA6B;;;;IAOhF;;OAEG;IACH,OAAO,IAAI,iBAAiB;IAoB5B,UAAU,CAAC,MAAM,EAAE,MAAM,EAAE,QAAQ,GAAE,OAAO,aAA6B;IAIzE,WAAW,CAAC,OAAO,EAAE,MAAM,EAAE,QAAQ,GAAE,OAAO,aAA6B;IAI3E,GAAG,CAAC,GAAG,EAAE,MAAM,EAAE,GAAG,KAAK,EAAE,OAAO,EAAE;IAIpC,KAAK,CAAC,GAAG,EAAE,MAAM,EAAE,GAAG,KAAK,EAAE,OAAO,EAAE;IAItC,IAAI,CAAC,GAAG,EAAE,MAAM,EAAE,GAAG,KAAK,EAAE,OAAO,EAAE;IAIrC,KAAK,CAAC,GAAG,EAAE,MAAM,EAAE,GAAG,KAAK,EAAE,OAAO,EAAE;IAItC,OAAO,CAAC,GAAG,EAAE,MAAM,EAAE,GAAG,KAAK,EAAE,OAAO,EAAE;CAGzC"}
1
+ {"version":3,"file":"LoggerService.d.ts","sourceRoot":"","sources":["../../src/nestjs/LoggerService.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,aAAa,IAAI,iBAAiB,EAAE,MAAM,gBAAgB,CAAA;AACxE,OAAO,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAA;AAE5C,qBAAa,iBAAiB;IAC5B,OAAO,CAAC,MAAM,CAAa;gBAEf,UAAU,CAAC,EAAE,WAAW;IAKpC,MAAM,CAAC,UAAU,CAAC,MAAM,EAAE,MAAM,EAAE,QAAQ,GAAE,OAAO,iBAAqC;;;;IAOxF;;OAEG;IACH,OAAO,IAAI,iBAAiB;IAoB5B,UAAU,CAAC,MAAM,EAAE,MAAM,EAAE,QAAQ,GAAE,OAAO,iBAAqC;IAIjF,WAAW,CAAC,OAAO,EAAE,MAAM,EAAE,QAAQ,GAAE,OAAO,iBAAqC;IAInF,GAAG,CAAC,GAAG,EAAE,MAAM,EAAE,GAAG,KAAK,EAAE,OAAO,EAAE;IAIpC,KAAK,CAAC,GAAG,EAAE,MAAM,EAAE,GAAG,KAAK,EAAE,OAAO,EAAE;IAItC,IAAI,CAAC,GAAG,EAAE,MAAM,EAAE,GAAG,KAAK,EAAE,OAAO,EAAE;IAIrC,KAAK,CAAC,GAAG,EAAE,MAAM,EAAE,GAAG,KAAK,EAAE,OAAO,EAAE;IAItC,OAAO,CAAC,GAAG,EAAE,MAAM,EAAE,GAAG,KAAK,EAAE,OAAO,EAAE;CAGzC;AAED;;GAEG;AAEH,eAAO,MAAM,aAAa,0BAAoB,CAAA"}
package/README.md CHANGED
@@ -23,6 +23,63 @@ logger.withModule("AnotherModule").info("Hello, world!")
23
23
 
24
24
  ## NestJS
25
25
 
26
+ ### Using NestJSLoggerClass (recommended)
27
+
28
+ override default logger:
29
+
30
+ ```typescript
31
+ import { NestJSLoggerClass, LoggerFactory } from "@we-are-singular/logger"
32
+
33
+ // Using direct instantiation
34
+ const app = await NestFactory.createApplicationContext(AppModule, {
35
+ logger: new NestJSLoggerClass().withModule("AppModule").forRoot(),
36
+ })
37
+
38
+ // Using LoggerFactory
39
+ const app = await NestFactory.createApplicationContext(AppModule, {
40
+ logger: LoggerFactory.forNestJS("AppModule").forRoot(),
41
+ })
42
+ ```
43
+
44
+ auto context from module provider:
45
+
46
+ ```typescript
47
+ // use forFeature() In other modules
48
+ @Module({
49
+ imports: [],
50
+ controllers: [],
51
+ providers: [
52
+ //
53
+ NestJSLoggerClass.forFeature("Services"),
54
+ ],
55
+ exports: [
56
+ //
57
+ NestJSLoggerClass,
58
+ ],
59
+ })
60
+ export class ServicesModule {}
61
+ ```
62
+
63
+ auto context:
64
+
65
+ ```typescript
66
+ // as a base class, adding a logger to all classes with a context of the class name
67
+ @Injectable()
68
+ export abstract class BaseClass {
69
+ readonly logger: NestJSLoggerClass
70
+ constructor(
71
+ //
72
+ @Inject(NestJSLoggerClass) logger: NestJSLoggerClass
73
+ ) {
74
+ this.logger = logger.withContext(this.constructor.name.toString())
75
+ }
76
+ }
77
+ ```
78
+
79
+ ### Using LoggerService (deprecated)
80
+
81
+ > **Note:** `LoggerService` is deprecated and will be removed in a future version. Please use `NestJSLoggerClass` instead.
82
+
26
83
  override default logger:
27
84
 
28
85
  ```typescript
@@ -68,3 +125,50 @@ export abstract class BaseClass {
68
125
  }
69
126
  }
70
127
  ```
128
+
129
+ ## Fastify
130
+
131
+ ### Using FastifyLoggerClass
132
+
133
+ The FastifyLoggerClass implements the FastifyBaseLogger interface and can be used directly with Fastify:
134
+
135
+ ```typescript
136
+ import fastify from "fastify"
137
+ import { FastifyLoggerClass, LoggerFactory } from "@we-are-singular/logger"
138
+
139
+ // Using direct instantiation with app and module
140
+ const app = fastify({
141
+ logger: new FastifyLoggerClass("MyApp", "api"),
142
+ })
143
+
144
+ // Using LoggerFactory
145
+ const app = fastify({
146
+ logger: LoggerFactory.forFastify("MyApp", "api"),
147
+ })
148
+
149
+ // Just module (app will be empty)
150
+ const app = fastify({
151
+ logger: new FastifyLoggerClass(undefined, "api"),
152
+ })
153
+ ```
154
+
155
+ This replaces the need for custom logger creation like:
156
+
157
+ ```typescript
158
+ // Old way (no longer needed)
159
+ function createFastifyLogger(): FastifyBaseLogger {
160
+ const apiLogger = logger.fork().setModule("api")
161
+
162
+ return {
163
+ level: "info",
164
+ info: apiLogger.info.bind(apiLogger),
165
+ error: apiLogger.error.bind(apiLogger),
166
+ debug: apiLogger.debug.bind(apiLogger),
167
+ fatal: apiLogger.fatal.bind(apiLogger),
168
+ warn: apiLogger.warn.bind(apiLogger),
169
+ trace: apiLogger.trace.bind(apiLogger),
170
+ silent: apiLogger.silent?.bind(apiLogger) || (() => {}),
171
+ child: () => createFastifyLogger(),
172
+ }
173
+ }
174
+ ```
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@we-are-singular/logger",
3
- "version": "2.0.0",
3
+ "version": "2.1.1",
4
4
  "description": "A simple pinojs wrapper",
5
5
  "type": "module",
6
6
  "types": ".build/index.d.ts",
@@ -33,7 +33,9 @@
33
33
  "devDependencies": {
34
34
  "@nestjs/common": "^11.1.9",
35
35
  "@rollup/plugin-typescript": "^12.3.0",
36
+ "@types/node": "^25.2.3",
36
37
  "@we-are-singular/eslint-config": "^2.4.0",
38
+ "fastify": "^5.7.4",
37
39
  "prettier": "^3.6.2",
38
40
  "release-it": "^19.0.6",
39
41
  "rollup": "^4.53.2"