@iamnnort/nestjs-logger 2.1.2 → 2.1.3

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/README.md CHANGED
@@ -1,15 +1,6 @@
1
1
  # @iamnnort/nestjs-logger
2
2
 
3
- Logger module for NestJS based on [nestjs-pino](https://github.com/iamolegga/nestjs-pino) structured request logging, clean output, CloudWatch-friendly.
4
-
5
- ## Features
6
-
7
- - Automatic HTTP request/response logging via pino-http
8
- - Clean single-line request logs: `INFO: [Http] GET /v1/visits 200 (3ms)`
9
- - Context-aware logging: `INFO: [AppController] User logged in`
10
- - Global exception filter with proper error responses
11
- - No colors, no timestamps, no PID — optimized for AWS CloudWatch
12
- - Configurable log level
3
+ Logger module for NestJS - Simple - Informative - Pretty
13
4
 
14
5
  ## Installation
15
6
 
@@ -25,10 +16,14 @@ yarn add @iamnnort/nestjs-logger
25
16
 
26
17
  ```ts
27
18
  import { Module } from '@nestjs/common';
28
- import { LoggerModule } from '@iamnnort/nestjs-logger';
19
+ import { LoggerModule, LoggerLevels } from '@iamnnort/nestjs-logger';
29
20
 
30
21
  @Module({
31
- imports: [LoggerModule.forRoot()],
22
+ imports: [
23
+ LoggerModule.register({
24
+ level: LoggerLevels.INFO,
25
+ }),
26
+ ],
32
27
  })
33
28
  export class AppModule {}
34
29
  ```
@@ -56,20 +51,37 @@ async function bootstrap() {
56
51
  bootstrap();
57
52
  ```
58
53
 
59
- ### Log level
54
+ ### Async configuration
60
55
 
61
- Set the minimum level with `LoggerModule.forRoot({ level: 'debug' })`. Levels (most to least verbose): `trace`, `debug`, `info`, `warn`, `error`, `fatal`. Default is `info`.
56
+ Use `registerAsync` when the config depends on other providers (e.g. `ConfigService`):
62
57
 
63
58
  ```ts
59
+ import { Module } from '@nestjs/common';
60
+ import { ConfigModule, ConfigService } from '@nestjs/config';
61
+ import { LoggerModule } from '@iamnnort/nestjs-logger';
62
+
64
63
  @Module({
65
- imports: [LoggerModule.forRoot({ level: 'debug' })],
64
+ imports: [
65
+ ConfigModule.forRoot(),
66
+ LoggerModule.registerAsync({
67
+ imports: [ConfigModule],
68
+ inject: [ConfigService],
69
+ useFactory: (config: ConfigService) => ({
70
+ level: config.get('LOG_LEVEL', 'info'),
71
+ }),
72
+ }),
73
+ ],
66
74
  })
67
75
  export class AppModule {}
68
76
  ```
69
77
 
78
+ ### Log level
79
+
80
+ Levels (most to least verbose): `trace`, `debug`, `info`, `warn`, `error`, `fatal`.
81
+
70
82
  ### Using the logger in your code
71
83
 
72
- Inject `LoggerService` and set the context to get `[ClassName]` prefix in all log messages:
84
+ Inject `LoggerService` and set the context to get a named logger:
73
85
 
74
86
  ```ts
75
87
  import { Controller, Get, Post } from '@nestjs/common';
@@ -100,22 +112,32 @@ export class AppController {
100
112
  The module registers a global exception filter automatically. It returns proper error responses for both HTTP exceptions and unhandled errors:
101
113
 
102
114
  ```json
103
- // BadRequestException('Example error')
104
- { "message": "Example error", "error": "Bad Request", "statusCode": 400 }
115
+ // BadRequestException('Http error.')
116
+ { "message": "Http error.", "error": "Bad Request", "statusCode": 400 }
105
117
 
106
- // throw new Error('Something went wrong.')
118
+ // throw new Error('Runtime error.')
107
119
  { "message": "Something went wrong.", "error": "Internal Server Error", "statusCode": 500 }
108
120
  ```
109
121
 
110
122
  ## Output
111
123
 
112
124
  ```
113
- INFO: [NestFactory] Application is starting...
114
- INFO: [NestApplication] Application started.
115
- INFO: [Http] GET / 200 (3ms)
116
- INFO: [Http] POST / 200 (1ms)
117
- INFO: [Http] POST /http-error 400 (2ms)
118
- ERROR: [AppController] User error.
125
+ INFO (NestFactory): Application is starting...
126
+ INFO (NestApplication): Application started.
127
+ INFO (Http): GET / 200 OK (3ms)
128
+ INFO (Http): POST / 201 Created (1ms)
129
+ request: {
130
+ "json": {
131
+ "id": 1234
132
+ }
133
+ }
134
+ ERROR (AppController): User error.
135
+ INFO (Http): POST /user-error 201 Created (1ms)
136
+ ERROR (Http): POST /http-error 500 Internal Server Error
137
+ error: {
138
+ "type": "Error",
139
+ "message": "failed with status code 500"
140
+ }
119
141
  ```
120
142
 
121
143
  ## Example
package/dist/index.d.mts CHANGED
@@ -2,8 +2,24 @@ import * as _nestjs_common from '@nestjs/common';
2
2
  import { DynamicModule, ConsoleLogger } from '@nestjs/common';
3
3
 
4
4
  type LoggerConfig = {
5
- level: 'fatal' | 'error' | 'warn' | 'info' | 'debug' | 'trace';
5
+ level: LoggerLevels;
6
6
  };
7
+ declare enum LoggerLevels {
8
+ FATAL = "fatal",
9
+ ERROR = "error",
10
+ WARN = "warn",
11
+ INFO = "info",
12
+ DEBUG = "debug",
13
+ TRACE = "trace"
14
+ }
15
+ declare enum LoggerContexts {
16
+ SYSTEM = "System",
17
+ INSTANCE_LOADER = "InstanceLoader",
18
+ ROUTES_RESOLVER = "RoutesResolver",
19
+ ROUTER_EXPLORER = "RouterExplorer",
20
+ NEST_FACTORY = "NestFactory",
21
+ NEST_APPLICATION = "NestApplication"
22
+ }
7
23
 
8
24
  declare const ConfigurableModuleClass: _nestjs_common.ConfigurableModuleCls<LoggerConfig, "register", "create", {}>;
9
25
  declare const OPTIONS_TYPE: LoggerConfig & Partial<{}>;
@@ -15,7 +31,7 @@ declare class LoggerModule extends ConfigurableModuleClass {
15
31
  }
16
32
 
17
33
  declare class LoggerService extends ConsoleLogger {
18
- private readonly logger;
34
+ private readonly pinoLogger;
19
35
  private print;
20
36
  log(message: any, context?: string): void;
21
37
  error(message: any, context?: string): void;
@@ -25,4 +41,4 @@ declare class LoggerService extends ConsoleLogger {
25
41
  fatal(message: any, context?: string): void;
26
42
  }
27
43
 
28
- export { LoggerModule, LoggerService };
44
+ export { type LoggerConfig, LoggerContexts, LoggerLevels, LoggerModule, LoggerService };
package/dist/index.d.ts CHANGED
@@ -2,8 +2,24 @@ import * as _nestjs_common from '@nestjs/common';
2
2
  import { DynamicModule, ConsoleLogger } from '@nestjs/common';
3
3
 
4
4
  type LoggerConfig = {
5
- level: 'fatal' | 'error' | 'warn' | 'info' | 'debug' | 'trace';
5
+ level: LoggerLevels;
6
6
  };
7
+ declare enum LoggerLevels {
8
+ FATAL = "fatal",
9
+ ERROR = "error",
10
+ WARN = "warn",
11
+ INFO = "info",
12
+ DEBUG = "debug",
13
+ TRACE = "trace"
14
+ }
15
+ declare enum LoggerContexts {
16
+ SYSTEM = "System",
17
+ INSTANCE_LOADER = "InstanceLoader",
18
+ ROUTES_RESOLVER = "RoutesResolver",
19
+ ROUTER_EXPLORER = "RouterExplorer",
20
+ NEST_FACTORY = "NestFactory",
21
+ NEST_APPLICATION = "NestApplication"
22
+ }
7
23
 
8
24
  declare const ConfigurableModuleClass: _nestjs_common.ConfigurableModuleCls<LoggerConfig, "register", "create", {}>;
9
25
  declare const OPTIONS_TYPE: LoggerConfig & Partial<{}>;
@@ -15,7 +31,7 @@ declare class LoggerModule extends ConfigurableModuleClass {
15
31
  }
16
32
 
17
33
  declare class LoggerService extends ConsoleLogger {
18
- private readonly logger;
34
+ private readonly pinoLogger;
19
35
  private print;
20
36
  log(message: any, context?: string): void;
21
37
  error(message: any, context?: string): void;
@@ -25,4 +41,4 @@ declare class LoggerService extends ConsoleLogger {
25
41
  fatal(message: any, context?: string): void;
26
42
  }
27
43
 
28
- export { LoggerModule, LoggerService };
44
+ export { type LoggerConfig, LoggerContexts, LoggerLevels, LoggerModule, LoggerService };
package/dist/index.js CHANGED
@@ -1,2 +1,2 @@
1
- "use strict";Object.defineProperty(exports, "__esModule", {value: true}); function _nullishCoalesce(lhs, rhsFn) { if (lhs != null) { return lhs; } else { return rhsFn(); } } function _optionalChain(ops) { let lastAccessLHS = undefined; let value = ops[0]; let i = 1; while (i < ops.length) { const op = ops[i]; const fn = ops[i + 1]; i += 2; if ((op === 'optionalAccess' || op === 'optionalCall') && value == null) { return undefined; } if (op === 'access' || op === 'optionalAccess') { lastAccessLHS = value; value = fn(value); } else if (op === 'call' || op === 'optionalCall') { value = fn((...args) => value.call(lastAccessLHS, ...args)); lastAccessLHS = undefined; } } return value; }var _=Object.defineProperty;var c=(r,e)=>_(r,"name",{value:e,configurable:!0});var _common = require('@nestjs/common');var _core = require('@nestjs/core');var _nestjspino = require('nestjs-pino');var{ConfigurableModuleClass:E,MODULE_OPTIONS_TOKEN:D,OPTIONS_TYPE:H,ASYNC_OPTIONS_TYPE:Y}=new (0, _common.ConfigurableModuleBuilder)().build();function T(r,e,t,n){var s=arguments.length,o=s<3?e:n===null?n=Object.getOwnPropertyDescriptor(e,t):n,i;if(typeof Reflect=="object"&&typeof Reflect.decorate=="function")o=Reflect.decorate(r,e,t,n);else for(var a=r.length-1;a>=0;a--)(i=r[a])&&(o=(s<3?i(o):s>3?i(e,t,o):i(e,t))||o);return s>3&&o&&Object.defineProperty(e,t,o),o}c(T,"_ts_decorate");var f=class{static{c(this,"LoggerExceptionFilter")}catch(e,t){let s=t.switchToHttp().getResponse();if(e instanceof _common.HttpException){let o=e.getStatus(),i=e.getResponse();return s.status(o).json(i)}s.status(_common.HttpStatus.INTERNAL_SERVER_ERROR).json({message:"Something went wrong.",error:"Internal Server Error",statusCode:_common.HttpStatus.INTERNAL_SERVER_ERROR})}};f=T([_common.Catch.call(void 0, )],f);function m(r){return{pinoHttp:{level:r.level,timestamp:!1,transport:{target:"pino-pretty",options:{colorize:!1,ignore:"pid,hostname,req,res,responseTime,reqId",messageFormat:"{msg}"}},customSuccessMessage:h,customErrorMessage:A,customAttributeKeys:{err:"error"}},forRoutes:[{path:"*",method:_common.RequestMethod.ALL}]}}c(m,"makePinoParams");function h(r,e,t){return`[Http] ${r.method} ${r.url} ${e.statusCode} (${t}ms)`}c(h,"makeSuccessMessage");function A(r,e){return`[Http] ${r.method} ${r.url} ${e.statusCode}`}c(A,"makeErrorMessage");var l=(function(r){return r.SYSTEM="System",r.INSTANCE_LOADER="InstanceLoader",r.ROUTES_RESOLVER="RoutesResolver",r.ROUTER_EXPLORER="RouterExplorer",r.NEST_FACTORY="NestFactory",r.NEST_APPLICATION="NestApplication",r})({});function d(r,e,t,n){var s=arguments.length,o=s<3?e:n===null?n=Object.getOwnPropertyDescriptor(e,t):n,i;if(typeof Reflect=="object"&&typeof Reflect.decorate=="function")o=Reflect.decorate(r,e,t,n);else for(var a=r.length-1;a>=0;a--)(i=r[a])&&(o=(s<3?i(o):s>3?i(e,t,o):i(e,t))||o);return s>3&&o&&Object.defineProperty(e,t,o),o}c(d,"_ts_decorate");function I(r,e){if(typeof Reflect=="object"&&typeof Reflect.metadata=="function")return Reflect.metadata(r,e)}c(I,"_ts_metadata");var p=class extends _common.ConsoleLogger{static{c(this,"LoggerService")}print(e,t,n){let s=_optionalChain([n, 'optionalAccess', _2 => _2.replace, 'call', _3 => _3(/^_/,"")])||this.context||"";if([l.INSTANCE_LOADER,l.ROUTES_RESOLVER,l.ROUTER_EXPLORER].includes(s))return;let a={[l.NEST_FACTORY]:"Application is starting...",[l.NEST_APPLICATION]:"Application started."}[s]||t||"";return this.logger[e](`[${s}] ${a}`)}log(e,t){this.print("log",e,t)}error(e,t){this.print("error",e,t)}warn(e,t){this.print("warn",e,t)}debug(e,t){this.print("debug",e,t)}verbose(e,t){this.print("verbose",e,t)}fatal(e,t){this.print("fatal",e,t)}};d([_common.Inject.call(void 0, _nestjspino.Logger),I("design:type",typeof _nestjspino.Logger>"u"?Object:_nestjspino.Logger)],p.prototype,"logger",void 0);p= exports.LoggerService =d([_common.Injectable.call(void 0, {scope:_common.Scope.TRANSIENT})],p);function y(r,e,t,n){var s=arguments.length,o=s<3?e:n===null?n=Object.getOwnPropertyDescriptor(e,t):n,i;if(typeof Reflect=="object"&&typeof Reflect.decorate=="function")o=Reflect.decorate(r,e,t,n);else for(var a=r.length-1;a>=0;a--)(i=r[a])&&(o=(s<3?i(o):s>3?i(e,t,o):i(e,t))||o);return s>3&&o&&Object.defineProperty(e,t,o),o}c(y,"_ts_decorate");var u=class extends E{static{c(this,"LoggerModule")}static register(e){let t=super.register(e);return{...t,imports:[..._nullishCoalesce(t.imports, () => ([])),_nestjspino.LoggerModule.forRoot(m(e))]}}static registerAsync(e){let t=super.registerAsync(e);return{...t,imports:[..._nullishCoalesce(t.imports, () => ([])),_nestjspino.LoggerModule.forRootAsync({imports:e.imports,inject:e.inject,useFactory:c(async(...n)=>{if(e.useFactory){let s=await e.useFactory(...n);return m(s)}return m({})},"useFactory")})]}}};u= exports.LoggerModule =y([_common.Global.call(void 0, ),_common.Module.call(void 0, {providers:[p,{provide:_core.APP_FILTER,useClass:f}],exports:[p]})],u);exports.LoggerModule = u; exports.LoggerService = p;
1
+ "use strict";Object.defineProperty(exports, "__esModule", {value: true}); function _nullishCoalesce(lhs, rhsFn) { if (lhs != null) { return lhs; } else { return rhsFn(); } } function _optionalChain(ops) { let lastAccessLHS = undefined; let value = ops[0]; let i = 1; while (i < ops.length) { const op = ops[i]; const fn = ops[i + 1]; i += 2; if ((op === 'optionalAccess' || op === 'optionalCall') && value == null) { return undefined; } if (op === 'access' || op === 'optionalAccess') { lastAccessLHS = value; value = fn(value); } else if (op === 'call' || op === 'optionalCall') { value = fn((...args) => value.call(lastAccessLHS, ...args)); lastAccessLHS = undefined; } } return value; }var x=Object.defineProperty;var a=(r,e)=>x(r,"name",{value:e,configurable:!0});var _common = require('@nestjs/common');var _core = require('@nestjs/core');var _nestjspino = require('nestjs-pino');var{ConfigurableModuleClass:E,MODULE_OPTIONS_TOKEN:Y,OPTIONS_TYPE:q,ASYNC_OPTIONS_TYPE:V}=new (0, _common.ConfigurableModuleBuilder)().build();function S(r,e,t,n){var s=arguments.length,o=s<3?e:n===null?n=Object.getOwnPropertyDescriptor(e,t):n,i;if(typeof Reflect=="object"&&typeof Reflect.decorate=="function")o=Reflect.decorate(r,e,t,n);else for(var c=r.length-1;c>=0;c--)(i=r[c])&&(o=(s<3?i(o):s>3?i(e,t,o):i(e,t))||o);return s>3&&o&&Object.defineProperty(e,t,o),o}a(S,"_ts_decorate");var p=class{static{a(this,"LoggerExceptionFilter")}catch(e,t){let s=t.switchToHttp().getResponse();if(e instanceof _common.HttpException){let o=e.getStatus(),i=e.getResponse();return s.status(o).json(i)}s.status(_common.HttpStatus.INTERNAL_SERVER_ERROR).json({message:"Something went wrong.",error:"Internal Server Error",statusCode:_common.HttpStatus.INTERNAL_SERVER_ERROR})}};p=S([_common.Catch.call(void 0, )],p);var _http = require('@iamnnort/config/http');function T(r){let e=r;return{url:r.url,method:r.method,data:e.body}}a(T,"toAxiosConfig");function d(r,e){return{status:e.statusCode,statusText:e.statusMessage,data:void 0,headers:{},config:T(r)}}a(d,"toAxiosResponse");function j(r,e,t){return{...t,name:t.name,message:t.message,response:d(r,e),config:T(r)}}a(j,"toAxiosError");function l(r){return{pinoHttp:{name:"Http",level:r.level,timestamp:!1,transport:{target:"pino-pretty",options:{colorize:!1,ignore:"pid,hostname,req,res,responseTime,reqId"}},customSuccessMessage:a((e,t,n)=>{let s=d(e,t);return new (0, _http.HttpMessageBuilder)({response:s,duration:n}).makeMethodText().makeUrlText().makeStatusText().makeDurationText().build()},"customSuccessMessage"),customSuccessObject:a((e,t)=>{let n=d(e,t),s=new (0, _http.HttpMessageBuilder)({response:n}),o={},i=s.makeRequestDataObj();return Object.keys(i).length>0&&(o.request=i),o},"customSuccessObject"),customErrorMessage:a((e,t,n)=>{let s=j(e,t,n);return new (0, _http.HttpMessageBuilder)({error:s}).makeMethodText().makeUrlText().makeStatusText().build()},"customErrorMessage"),customAttributeKeys:{err:"error"}},forRoutes:[{path:"*",method:_common.RequestMethod.ALL}]}}a(l,"makePinoParams");var Z=(function(r){return r.FATAL="fatal",r.ERROR="error",r.WARN="warn",r.INFO="info",r.DEBUG="debug",r.TRACE="trace",r})({}),f= exports.LoggerContexts =(function(r){return r.SYSTEM="System",r.INSTANCE_LOADER="InstanceLoader",r.ROUTES_RESOLVER="RoutesResolver",r.ROUTER_EXPLORER="RouterExplorer",r.NEST_FACTORY="NestFactory",r.NEST_APPLICATION="NestApplication",r})({});function b(r,e,t,n){var s=arguments.length,o=s<3?e:n===null?n=Object.getOwnPropertyDescriptor(e,t):n,i;if(typeof Reflect=="object"&&typeof Reflect.decorate=="function")o=Reflect.decorate(r,e,t,n);else for(var c=r.length-1;c>=0;c--)(i=r[c])&&(o=(s<3?i(o):s>3?i(e,t,o):i(e,t))||o);return s>3&&o&&Object.defineProperty(e,t,o),o}a(b,"_ts_decorate");function I(r,e){if(typeof Reflect=="object"&&typeof Reflect.metadata=="function")return Reflect.metadata(r,e)}a(I,"_ts_metadata");var u=class extends _common.ConsoleLogger{static{a(this,"LoggerService")}print(e,t,n){let s=_optionalChain([n, 'optionalAccess', _2 => _2.replace, 'call', _3 => _3(/^_/,"")])||this.context||"";if([f.INSTANCE_LOADER,f.ROUTES_RESOLVER,f.ROUTER_EXPLORER].includes(s))return;let c={[f.NEST_FACTORY]:"Application is starting...",[f.NEST_APPLICATION]:"Application started."}[s]||t||"";(s?this.pinoLogger.logger.child({name:s}):this.pinoLogger.logger)[e](c)}log(e,t){this.print("info",e,t)}error(e,t){this.print("error",e,t)}warn(e,t){this.print("warn",e,t)}debug(e,t){this.print("debug",e,t)}verbose(e,t){this.print("trace",e,t)}fatal(e,t){this.print("fatal",e,t)}};b([_common.Inject.call(void 0, _nestjspino.PinoLogger),I("design:type",typeof _nestjspino.PinoLogger>"u"?Object:_nestjspino.PinoLogger)],u.prototype,"pinoLogger",void 0);u= exports.LoggerService =b([_common.Injectable.call(void 0, {scope:_common.Scope.TRANSIENT})],u);function v(r,e,t,n){var s=arguments.length,o=s<3?e:n===null?n=Object.getOwnPropertyDescriptor(e,t):n,i;if(typeof Reflect=="object"&&typeof Reflect.decorate=="function")o=Reflect.decorate(r,e,t,n);else for(var c=r.length-1;c>=0;c--)(i=r[c])&&(o=(s<3?i(o):s>3?i(e,t,o):i(e,t))||o);return s>3&&o&&Object.defineProperty(e,t,o),o}a(v,"_ts_decorate");var m=class extends E{static{a(this,"LoggerModule")}static register(e){let t=super.register(e);return{...t,imports:[..._nullishCoalesce(t.imports, () => ([])),_nestjspino.LoggerModule.forRoot(l(e))]}}static registerAsync(e){let t=super.registerAsync(e);return{...t,imports:[..._nullishCoalesce(t.imports, () => ([])),_nestjspino.LoggerModule.forRootAsync({imports:e.imports,inject:e.inject,useFactory:a(async(...n)=>{if(e.useFactory){let s=await e.useFactory(...n);return l(s)}return l({})},"useFactory")})]}}};m= exports.LoggerModule =v([_common.Global.call(void 0, ),_common.Module.call(void 0, {providers:[u,{provide:_core.APP_FILTER,useClass:p}],exports:[u]})],m);exports.LoggerContexts = f; exports.LoggerLevels = Z; exports.LoggerModule = m; exports.LoggerService = u;
2
2
  //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["/home/runner/work/nestjs-logger/nestjs-logger/dist/index.js","../src/module.ts","../src/module-definition.ts","../src/exception-filter.ts","../src/builder.ts"],"names":["ConfigurableModuleClass","MODULE_OPTIONS_TOKEN","OPTIONS_TYPE","ASYNC_OPTIONS_TYPE","ConfigurableModuleBuilder","build","LoggerExceptionFilter","catch","exception","host","response","switchToHttp","getResponse","HttpException","statusCode","getStatus","errorResponse","status","json","HttpStatus","INTERNAL_SERVER_ERROR","message","error","makePinoParams","options","pinoHttp","level","timestamp","transport","target","colorize","ignore","messageFormat","customSuccessMessage","makeSuccessMessage","customErrorMessage","makeErrorMessage","customAttributeKeys","err","forRoutes","path","method","RequestMethod","ALL","req","res","responseTime","url"],"mappings":"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","file":"/home/runner/work/nestjs-logger/nestjs-logger/dist/index.js","sourcesContent":[null,"import { DynamicModule, Global, Module } from '@nestjs/common';\nimport { APP_FILTER } from '@nestjs/core';\nimport { LoggerModule as NestJsPinoLoggerModule } from 'nestjs-pino';\nimport { ASYNC_OPTIONS_TYPE, ConfigurableModuleClass, OPTIONS_TYPE } from './module-definition';\nimport { LoggerExceptionFilter } from './exception-filter';\nimport { makePinoParams } from './builder';\nimport { LoggerService } from './service';\nimport type { LoggerConfig } from './types';\n\n@Global()\n@Module({\n providers: [LoggerService, { provide: APP_FILTER, useClass: LoggerExceptionFilter }],\n exports: [LoggerService],\n})\nexport class LoggerModule extends ConfigurableModuleClass {\n static register(options: typeof OPTIONS_TYPE): DynamicModule {\n const base = super.register(options);\n\n return {\n ...base,\n imports: [...(base.imports ?? []), NestJsPinoLoggerModule.forRoot(makePinoParams(options))],\n };\n }\n\n static registerAsync(options: typeof ASYNC_OPTIONS_TYPE): DynamicModule {\n const base = super.registerAsync(options);\n\n return {\n ...base,\n imports: [\n ...(base.imports ?? []),\n NestJsPinoLoggerModule.forRootAsync({\n imports: options.imports,\n inject: options.inject,\n useFactory: async (...args: unknown[]) => {\n if (options.useFactory) {\n const config = await options.useFactory(...args);\n\n return makePinoParams(config);\n }\n\n return makePinoParams({} as LoggerConfig);\n },\n }),\n ],\n };\n }\n}\n","import { ConfigurableModuleBuilder } from '@nestjs/common';\nimport { LoggerConfig } from './types';\n\nexport const { ConfigurableModuleClass, MODULE_OPTIONS_TOKEN, OPTIONS_TYPE, ASYNC_OPTIONS_TYPE } =\n new ConfigurableModuleBuilder<LoggerConfig>().build();\n","import { type ArgumentsHost, Catch, type ExceptionFilter, HttpException, HttpStatus } from '@nestjs/common';\nimport type { Response } from 'express';\n\n@Catch()\nexport class LoggerExceptionFilter implements ExceptionFilter {\n catch(exception: unknown, host: ArgumentsHost) {\n const ctx = host.switchToHttp();\n const response = ctx.getResponse<Response>();\n\n if (exception instanceof HttpException) {\n const statusCode = exception.getStatus();\n const errorResponse = exception.getResponse();\n\n return response.status(statusCode).json(errorResponse);\n }\n\n response.status(HttpStatus.INTERNAL_SERVER_ERROR).json({\n message: 'Something went wrong.',\n error: 'Internal Server Error',\n statusCode: HttpStatus.INTERNAL_SERVER_ERROR,\n });\n }\n}\n","import type { IncomingMessage, ServerResponse } from 'http';\nimport type { Params as NestJsPinoParams } from 'nestjs-pino';\nimport { OPTIONS_TYPE } from './module-definition';\nimport { RequestMethod } from '@nestjs/common';\n\nexport function makePinoParams(options: typeof OPTIONS_TYPE): NestJsPinoParams {\n return {\n pinoHttp: {\n level: options.level,\n timestamp: false,\n transport: {\n target: 'pino-pretty',\n options: {\n colorize: false,\n ignore: 'pid,hostname,req,res,responseTime,reqId',\n messageFormat: '{msg}',\n },\n },\n customSuccessMessage: makeSuccessMessage,\n customErrorMessage: makeErrorMessage,\n customAttributeKeys: {\n err: 'error',\n },\n },\n forRoutes: [\n {\n path: '*',\n method: RequestMethod.ALL,\n },\n ],\n };\n}\n\nfunction makeSuccessMessage(req: IncomingMessage, res: ServerResponse, responseTime: number): string {\n return `[Http] ${req.method} ${req.url} ${res.statusCode} (${responseTime}ms)`;\n}\n\nfunction makeErrorMessage(req: IncomingMessage, res: ServerResponse): string {\n return `[Http] ${req.method} ${req.url} ${res.statusCode}`;\n}\n"]}
1
+ {"version":3,"sources":["/home/runner/work/nestjs-logger/nestjs-logger/dist/index.js","../src/module.ts","../src/module-definition.ts","../src/exception-filter.ts","../src/builder.ts","../src/service.ts","../src/types.ts"],"names":["ConfigurableModuleClass","MODULE_OPTIONS_TOKEN","OPTIONS_TYPE","ASYNC_OPTIONS_TYPE","ConfigurableModuleBuilder","build","LoggerExceptionFilter","catch","exception","host","response","switchToHttp","getResponse","HttpException","statusCode","getStatus","errorResponse","status","json","HttpStatus","INTERNAL_SERVER_ERROR","message","error","toAxiosConfig","req","expressReq","url","method","data","body","toAxiosResponse","res","statusText","statusMessage","undefined","headers","config","toAxiosError","name","makePinoParams","options","pinoHttp","level","timestamp","transport","target","colorize","ignore","customSuccessMessage","__name","duration","HttpMessageBuilder","makeMethodText","makeUrlText","makeStatusText","makeDurationText","customSuccessObject","messageBuilder","requestData","makeRequestDataObj","Object","keys","length","customErrorMessage","axiosError","customAttributeKeys","err","forRoutes","path","RequestMethod","ALL","LoggerLevels","LoggerContexts","LoggerService","ConsoleLogger","pinoLogger","print","context","ctx","replace","INSTANCE_LOADER","ROUTES_RESOLVER","ROUTER_EXPLORER","includes","msg","NEST_FACTORY","NEST_APPLICATION","logger","child","log","warn","debug","verbose","fatal","scope","Scope","TRANSIENT","LoggerModule","register","base","imports","NestJsPinoLoggerModule","forRoot","registerAsync","forRootAsync","inject","useFactory","args","providers","provide","APP_FILTER","useClass","exports"],"mappings":"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","file":"/home/runner/work/nestjs-logger/nestjs-logger/dist/index.js","sourcesContent":[null,"import { DynamicModule, Global, Module } from '@nestjs/common';\nimport { APP_FILTER } from '@nestjs/core';\nimport { LoggerModule as NestJsPinoLoggerModule } from 'nestjs-pino';\nimport { ASYNC_OPTIONS_TYPE, ConfigurableModuleClass, OPTIONS_TYPE } from './module-definition';\nimport { LoggerExceptionFilter } from './exception-filter';\nimport { makePinoParams } from './builder';\nimport { LoggerService } from './service';\nimport type { LoggerConfig } from './types';\n\n@Global()\n@Module({\n providers: [LoggerService, { provide: APP_FILTER, useClass: LoggerExceptionFilter }],\n exports: [LoggerService],\n})\nexport class LoggerModule extends ConfigurableModuleClass {\n static register(options: typeof OPTIONS_TYPE): DynamicModule {\n const base = super.register(options);\n\n return {\n ...base,\n imports: [...(base.imports ?? []), NestJsPinoLoggerModule.forRoot(makePinoParams(options))],\n };\n }\n\n static registerAsync(options: typeof ASYNC_OPTIONS_TYPE): DynamicModule {\n const base = super.registerAsync(options);\n\n return {\n ...base,\n imports: [\n ...(base.imports ?? []),\n NestJsPinoLoggerModule.forRootAsync({\n imports: options.imports,\n inject: options.inject,\n useFactory: async (...args: unknown[]) => {\n if (options.useFactory) {\n const config = await options.useFactory(...args);\n\n return makePinoParams(config);\n }\n\n return makePinoParams({} as LoggerConfig);\n },\n }),\n ],\n };\n }\n}\n","import { ConfigurableModuleBuilder } from '@nestjs/common';\nimport { LoggerConfig } from './types';\n\nexport const { ConfigurableModuleClass, MODULE_OPTIONS_TOKEN, OPTIONS_TYPE, ASYNC_OPTIONS_TYPE } =\n new ConfigurableModuleBuilder<LoggerConfig>().build();\n","import { type ArgumentsHost, Catch, type ExceptionFilter, HttpException, HttpStatus } from '@nestjs/common';\nimport type { Response } from 'express';\n\n@Catch()\nexport class LoggerExceptionFilter implements ExceptionFilter {\n catch(exception: any, host: ArgumentsHost) {\n const ctx = host.switchToHttp();\n const response = ctx.getResponse<Response>();\n\n if (exception instanceof HttpException) {\n const statusCode = exception.getStatus();\n const errorResponse = exception.getResponse();\n\n return response.status(statusCode).json(errorResponse);\n }\n\n response.status(HttpStatus.INTERNAL_SERVER_ERROR).json({\n message: 'Something went wrong.',\n error: 'Internal Server Error',\n statusCode: HttpStatus.INTERNAL_SERVER_ERROR,\n });\n }\n}\n","import type { IncomingMessage, ServerResponse } from 'http';\nimport type { AxiosError, AxiosRequestConfig, AxiosResponse } from 'axios';\nimport type { Params as NestJsPinoParams } from 'nestjs-pino';\nimport { OPTIONS_TYPE } from './module-definition';\nimport { RequestMethod } from '@nestjs/common';\nimport { HttpMessageBuilder } from '@iamnnort/config/http';\n\nfunction toAxiosConfig(req: IncomingMessage): AxiosRequestConfig {\n const expressReq = req as IncomingMessage & { body?: unknown };\n\n return {\n url: req.url,\n method: req.method,\n data: expressReq.body,\n } as AxiosRequestConfig;\n}\n\nfunction toAxiosResponse(req: IncomingMessage, res: ServerResponse): AxiosResponse {\n return {\n status: res.statusCode,\n statusText: res.statusMessage,\n data: undefined,\n headers: {},\n config: toAxiosConfig(req),\n } as AxiosResponse;\n}\n\nfunction toAxiosError(req: IncomingMessage, res: ServerResponse, error: Error): AxiosError {\n return {\n ...error,\n name: error.name,\n message: error.message,\n response: toAxiosResponse(req, res),\n config: toAxiosConfig(req),\n } as AxiosError;\n}\n\nexport function makePinoParams(options: typeof OPTIONS_TYPE): NestJsPinoParams {\n return {\n pinoHttp: {\n name: 'Http',\n level: options.level,\n timestamp: false,\n transport: {\n target: 'pino-pretty',\n options: {\n colorize: false,\n ignore: 'pid,hostname,req,res,responseTime,reqId',\n },\n },\n customSuccessMessage: (req, res, duration) => {\n const response = toAxiosResponse(req, res);\n\n const messageBuilder = new HttpMessageBuilder({\n response,\n duration,\n });\n\n const message = messageBuilder.makeMethodText().makeUrlText().makeStatusText().makeDurationText().build();\n\n return message;\n },\n customSuccessObject: (req, res) => {\n const response = toAxiosResponse(req, res);\n\n const messageBuilder = new HttpMessageBuilder({\n response,\n });\n\n const data = {};\n\n const requestData = messageBuilder.makeRequestDataObj();\n\n if (Object.keys(requestData).length > 0) {\n data['request'] = requestData;\n }\n\n return data;\n },\n customErrorMessage: (req, res, error) => {\n const axiosError = toAxiosError(req, res, error);\n\n const messageBuilder = new HttpMessageBuilder({\n error: axiosError,\n });\n\n const message = messageBuilder.makeMethodText().makeUrlText().makeStatusText().build();\n\n return message;\n },\n customAttributeKeys: {\n err: 'error',\n },\n },\n forRoutes: [\n {\n path: '*',\n method: RequestMethod.ALL,\n },\n ],\n };\n}\n","import { ConsoleLogger, Inject, Injectable, Scope } from '@nestjs/common';\nimport { PinoLogger } from 'nestjs-pino';\nimport { LoggerContexts } from './types';\n\n@Injectable({\n scope: Scope.TRANSIENT,\n})\nexport class LoggerService extends ConsoleLogger {\n @Inject(PinoLogger)\n private readonly pinoLogger: PinoLogger;\n\n private print(level: string, message: any, context?: string) {\n const ctx = context?.replace(/^_/, '') || this.context || '';\n\n const ctxBlacklist: string[] = [\n LoggerContexts.INSTANCE_LOADER,\n LoggerContexts.ROUTES_RESOLVER,\n LoggerContexts.ROUTER_EXPLORER,\n ];\n\n if (ctxBlacklist.includes(ctx)) {\n return;\n }\n\n const ctxMessageMap: Record<string, string> = {\n [LoggerContexts.NEST_FACTORY]: 'Application is starting...',\n [LoggerContexts.NEST_APPLICATION]: 'Application started.',\n };\n\n const msg = ctxMessageMap[ctx] || message || '';\n\n const logger = ctx ? this.pinoLogger.logger.child({ name: ctx }) : this.pinoLogger.logger;\n\n logger[level](msg);\n }\n\n log(message: any, context?: string) {\n this.print('info', message, context);\n }\n\n error(message: any, context?: string) {\n this.print('error', message, context);\n }\n\n warn(message: any, context?: string) {\n this.print('warn', message, context);\n }\n\n debug(message: any, context?: string) {\n this.print('debug', message, context);\n }\n\n verbose(message: any, context?: string) {\n this.print('trace', message, context);\n }\n\n fatal(message: any, context?: string) {\n this.print('fatal', message, context);\n }\n}\n","export type LoggerConfig = {\n level: LoggerLevels;\n};\n\nexport enum LoggerLevels {\n FATAL = 'fatal',\n ERROR = 'error',\n WARN = 'warn',\n INFO = 'info',\n DEBUG = 'debug',\n TRACE = 'trace',\n}\n\nexport enum LoggerContexts {\n SYSTEM = 'System',\n INSTANCE_LOADER = 'InstanceLoader',\n ROUTES_RESOLVER = 'RoutesResolver',\n ROUTER_EXPLORER = 'RouterExplorer',\n NEST_FACTORY = 'NestFactory',\n NEST_APPLICATION = 'NestApplication',\n}\n"]}
package/dist/index.mjs CHANGED
@@ -1,2 +1,2 @@
1
- var _=Object.defineProperty;var c=(r,e)=>_(r,"name",{value:e,configurable:!0});import{Global as x,Module as C}from"@nestjs/common";import{APP_FILTER as w}from"@nestjs/core";import{LoggerModule as O}from"nestjs-pino";import{ConfigurableModuleBuilder as S}from"@nestjs/common";var{ConfigurableModuleClass:E,MODULE_OPTIONS_TOKEN:D,OPTIONS_TYPE:H,ASYNC_OPTIONS_TYPE:Y}=new S().build();import{Catch as N,HttpException as P,HttpStatus as g}from"@nestjs/common";function T(r,e,t,n){var s=arguments.length,o=s<3?e:n===null?n=Object.getOwnPropertyDescriptor(e,t):n,i;if(typeof Reflect=="object"&&typeof Reflect.decorate=="function")o=Reflect.decorate(r,e,t,n);else for(var a=r.length-1;a>=0;a--)(i=r[a])&&(o=(s<3?i(o):s>3?i(e,t,o):i(e,t))||o);return s>3&&o&&Object.defineProperty(e,t,o),o}c(T,"_ts_decorate");var f=class{static{c(this,"LoggerExceptionFilter")}catch(e,t){let s=t.switchToHttp().getResponse();if(e instanceof P){let o=e.getStatus(),i=e.getResponse();return s.status(o).json(i)}s.status(g.INTERNAL_SERVER_ERROR).json({message:"Something went wrong.",error:"Internal Server Error",statusCode:g.INTERNAL_SERVER_ERROR})}};f=T([N()],f);import{RequestMethod as b}from"@nestjs/common";function m(r){return{pinoHttp:{level:r.level,timestamp:!1,transport:{target:"pino-pretty",options:{colorize:!1,ignore:"pid,hostname,req,res,responseTime,reqId",messageFormat:"{msg}"}},customSuccessMessage:h,customErrorMessage:A,customAttributeKeys:{err:"error"}},forRoutes:[{path:"*",method:b.ALL}]}}c(m,"makePinoParams");function h(r,e,t){return`[Http] ${r.method} ${r.url} ${e.statusCode} (${t}ms)`}c(h,"makeSuccessMessage");function A(r,e){return`[Http] ${r.method} ${r.url} ${e.statusCode}`}c(A,"makeErrorMessage");import{ConsoleLogger as j,Inject as v,Injectable as L,Scope as M}from"@nestjs/common";import{Logger as R}from"nestjs-pino";var l=(function(r){return r.SYSTEM="System",r.INSTANCE_LOADER="InstanceLoader",r.ROUTES_RESOLVER="RoutesResolver",r.ROUTER_EXPLORER="RouterExplorer",r.NEST_FACTORY="NestFactory",r.NEST_APPLICATION="NestApplication",r})({});function d(r,e,t,n){var s=arguments.length,o=s<3?e:n===null?n=Object.getOwnPropertyDescriptor(e,t):n,i;if(typeof Reflect=="object"&&typeof Reflect.decorate=="function")o=Reflect.decorate(r,e,t,n);else for(var a=r.length-1;a>=0;a--)(i=r[a])&&(o=(s<3?i(o):s>3?i(e,t,o):i(e,t))||o);return s>3&&o&&Object.defineProperty(e,t,o),o}c(d,"_ts_decorate");function I(r,e){if(typeof Reflect=="object"&&typeof Reflect.metadata=="function")return Reflect.metadata(r,e)}c(I,"_ts_metadata");var p=class extends j{static{c(this,"LoggerService")}logger;print(e,t,n){let s=n?.replace(/^_/,"")||this.context||"";if([l.INSTANCE_LOADER,l.ROUTES_RESOLVER,l.ROUTER_EXPLORER].includes(s))return;let a={[l.NEST_FACTORY]:"Application is starting...",[l.NEST_APPLICATION]:"Application started."}[s]||t||"";return this.logger[e](`[${s}] ${a}`)}log(e,t){this.print("log",e,t)}error(e,t){this.print("error",e,t)}warn(e,t){this.print("warn",e,t)}debug(e,t){this.print("debug",e,t)}verbose(e,t){this.print("verbose",e,t)}fatal(e,t){this.print("fatal",e,t)}};d([v(R),I("design:type",typeof R>"u"?Object:R)],p.prototype,"logger",void 0);p=d([L({scope:M.TRANSIENT})],p);function y(r,e,t,n){var s=arguments.length,o=s<3?e:n===null?n=Object.getOwnPropertyDescriptor(e,t):n,i;if(typeof Reflect=="object"&&typeof Reflect.decorate=="function")o=Reflect.decorate(r,e,t,n);else for(var a=r.length-1;a>=0;a--)(i=r[a])&&(o=(s<3?i(o):s>3?i(e,t,o):i(e,t))||o);return s>3&&o&&Object.defineProperty(e,t,o),o}c(y,"_ts_decorate");var u=class extends E{static{c(this,"LoggerModule")}static register(e){let t=super.register(e);return{...t,imports:[...t.imports??[],O.forRoot(m(e))]}}static registerAsync(e){let t=super.registerAsync(e);return{...t,imports:[...t.imports??[],O.forRootAsync({imports:e.imports,inject:e.inject,useFactory:c(async(...n)=>{if(e.useFactory){let s=await e.useFactory(...n);return m(s)}return m({})},"useFactory")})]}}};u=y([x(),C({providers:[p,{provide:w,useClass:f}],exports:[p]})],u);export{u as LoggerModule,p as LoggerService};
1
+ var x=Object.defineProperty;var a=(r,e)=>x(r,"name",{value:e,configurable:!0});import{Global as L,Module as B}from"@nestjs/common";import{APP_FILTER as D}from"@nestjs/core";import{LoggerModule as h}from"nestjs-pino";import{ConfigurableModuleBuilder as A}from"@nestjs/common";var{ConfigurableModuleClass:E,MODULE_OPTIONS_TOKEN:Y,OPTIONS_TYPE:q,ASYNC_OPTIONS_TYPE:V}=new A().build();import{Catch as _,HttpException as N,HttpStatus as O}from"@nestjs/common";function S(r,e,t,n){var s=arguments.length,o=s<3?e:n===null?n=Object.getOwnPropertyDescriptor(e,t):n,i;if(typeof Reflect=="object"&&typeof Reflect.decorate=="function")o=Reflect.decorate(r,e,t,n);else for(var c=r.length-1;c>=0;c--)(i=r[c])&&(o=(s<3?i(o):s>3?i(e,t,o):i(e,t))||o);return s>3&&o&&Object.defineProperty(e,t,o),o}a(S,"_ts_decorate");var p=class{static{a(this,"LoggerExceptionFilter")}catch(e,t){let s=t.switchToHttp().getResponse();if(e instanceof N){let o=e.getStatus(),i=e.getResponse();return s.status(o).json(i)}s.status(O.INTERNAL_SERVER_ERROR).json({message:"Something went wrong.",error:"Internal Server Error",statusCode:O.INTERNAL_SERVER_ERROR})}};p=S([_()],p);import{RequestMethod as P}from"@nestjs/common";import{HttpMessageBuilder as R}from"@iamnnort/config/http";function T(r){let e=r;return{url:r.url,method:r.method,data:e.body}}a(T,"toAxiosConfig");function d(r,e){return{status:e.statusCode,statusText:e.statusMessage,data:void 0,headers:{},config:T(r)}}a(d,"toAxiosResponse");function j(r,e,t){return{...t,name:t.name,message:t.message,response:d(r,e),config:T(r)}}a(j,"toAxiosError");function l(r){return{pinoHttp:{name:"Http",level:r.level,timestamp:!1,transport:{target:"pino-pretty",options:{colorize:!1,ignore:"pid,hostname,req,res,responseTime,reqId"}},customSuccessMessage:a((e,t,n)=>{let s=d(e,t);return new R({response:s,duration:n}).makeMethodText().makeUrlText().makeStatusText().makeDurationText().build()},"customSuccessMessage"),customSuccessObject:a((e,t)=>{let n=d(e,t),s=new R({response:n}),o={},i=s.makeRequestDataObj();return Object.keys(i).length>0&&(o.request=i),o},"customSuccessObject"),customErrorMessage:a((e,t,n)=>{let s=j(e,t,n);return new R({error:s}).makeMethodText().makeUrlText().makeStatusText().build()},"customErrorMessage"),customAttributeKeys:{err:"error"}},forRoutes:[{path:"*",method:P.ALL}]}}a(l,"makePinoParams");import{ConsoleLogger as M,Inject as y,Injectable as C,Scope as w}from"@nestjs/common";import{PinoLogger as g}from"nestjs-pino";var Z=(function(r){return r.FATAL="fatal",r.ERROR="error",r.WARN="warn",r.INFO="info",r.DEBUG="debug",r.TRACE="trace",r})({}),f=(function(r){return r.SYSTEM="System",r.INSTANCE_LOADER="InstanceLoader",r.ROUTES_RESOLVER="RoutesResolver",r.ROUTER_EXPLORER="RouterExplorer",r.NEST_FACTORY="NestFactory",r.NEST_APPLICATION="NestApplication",r})({});function b(r,e,t,n){var s=arguments.length,o=s<3?e:n===null?n=Object.getOwnPropertyDescriptor(e,t):n,i;if(typeof Reflect=="object"&&typeof Reflect.decorate=="function")o=Reflect.decorate(r,e,t,n);else for(var c=r.length-1;c>=0;c--)(i=r[c])&&(o=(s<3?i(o):s>3?i(e,t,o):i(e,t))||o);return s>3&&o&&Object.defineProperty(e,t,o),o}a(b,"_ts_decorate");function I(r,e){if(typeof Reflect=="object"&&typeof Reflect.metadata=="function")return Reflect.metadata(r,e)}a(I,"_ts_metadata");var u=class extends M{static{a(this,"LoggerService")}pinoLogger;print(e,t,n){let s=n?.replace(/^_/,"")||this.context||"";if([f.INSTANCE_LOADER,f.ROUTES_RESOLVER,f.ROUTER_EXPLORER].includes(s))return;let c={[f.NEST_FACTORY]:"Application is starting...",[f.NEST_APPLICATION]:"Application started."}[s]||t||"";(s?this.pinoLogger.logger.child({name:s}):this.pinoLogger.logger)[e](c)}log(e,t){this.print("info",e,t)}error(e,t){this.print("error",e,t)}warn(e,t){this.print("warn",e,t)}debug(e,t){this.print("debug",e,t)}verbose(e,t){this.print("trace",e,t)}fatal(e,t){this.print("fatal",e,t)}};b([y(g),I("design:type",typeof g>"u"?Object:g)],u.prototype,"pinoLogger",void 0);u=b([C({scope:w.TRANSIENT})],u);function v(r,e,t,n){var s=arguments.length,o=s<3?e:n===null?n=Object.getOwnPropertyDescriptor(e,t):n,i;if(typeof Reflect=="object"&&typeof Reflect.decorate=="function")o=Reflect.decorate(r,e,t,n);else for(var c=r.length-1;c>=0;c--)(i=r[c])&&(o=(s<3?i(o):s>3?i(e,t,o):i(e,t))||o);return s>3&&o&&Object.defineProperty(e,t,o),o}a(v,"_ts_decorate");var m=class extends E{static{a(this,"LoggerModule")}static register(e){let t=super.register(e);return{...t,imports:[...t.imports??[],h.forRoot(l(e))]}}static registerAsync(e){let t=super.registerAsync(e);return{...t,imports:[...t.imports??[],h.forRootAsync({imports:e.imports,inject:e.inject,useFactory:a(async(...n)=>{if(e.useFactory){let s=await e.useFactory(...n);return l(s)}return l({})},"useFactory")})]}}};m=v([L(),B({providers:[u,{provide:D,useClass:p}],exports:[u]})],m);export{f as LoggerContexts,Z as LoggerLevels,m as LoggerModule,u as LoggerService};
2
2
  //# sourceMappingURL=index.mjs.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/module.ts","../src/module-definition.ts","../src/exception-filter.ts","../src/builder.ts","../src/service.ts","../src/types.ts"],"sourcesContent":["import { DynamicModule, Global, Module } from '@nestjs/common';\nimport { APP_FILTER } from '@nestjs/core';\nimport { LoggerModule as NestJsPinoLoggerModule } from 'nestjs-pino';\nimport { ASYNC_OPTIONS_TYPE, ConfigurableModuleClass, OPTIONS_TYPE } from './module-definition';\nimport { LoggerExceptionFilter } from './exception-filter';\nimport { makePinoParams } from './builder';\nimport { LoggerService } from './service';\nimport type { LoggerConfig } from './types';\n\n@Global()\n@Module({\n providers: [LoggerService, { provide: APP_FILTER, useClass: LoggerExceptionFilter }],\n exports: [LoggerService],\n})\nexport class LoggerModule extends ConfigurableModuleClass {\n static register(options: typeof OPTIONS_TYPE): DynamicModule {\n const base = super.register(options);\n\n return {\n ...base,\n imports: [...(base.imports ?? []), NestJsPinoLoggerModule.forRoot(makePinoParams(options))],\n };\n }\n\n static registerAsync(options: typeof ASYNC_OPTIONS_TYPE): DynamicModule {\n const base = super.registerAsync(options);\n\n return {\n ...base,\n imports: [\n ...(base.imports ?? []),\n NestJsPinoLoggerModule.forRootAsync({\n imports: options.imports,\n inject: options.inject,\n useFactory: async (...args: unknown[]) => {\n if (options.useFactory) {\n const config = await options.useFactory(...args);\n\n return makePinoParams(config);\n }\n\n return makePinoParams({} as LoggerConfig);\n },\n }),\n ],\n };\n }\n}\n","import { ConfigurableModuleBuilder } from '@nestjs/common';\nimport { LoggerConfig } from './types';\n\nexport const { ConfigurableModuleClass, MODULE_OPTIONS_TOKEN, OPTIONS_TYPE, ASYNC_OPTIONS_TYPE } =\n new ConfigurableModuleBuilder<LoggerConfig>().build();\n","import { type ArgumentsHost, Catch, type ExceptionFilter, HttpException, HttpStatus } from '@nestjs/common';\nimport type { Response } from 'express';\n\n@Catch()\nexport class LoggerExceptionFilter implements ExceptionFilter {\n catch(exception: unknown, host: ArgumentsHost) {\n const ctx = host.switchToHttp();\n const response = ctx.getResponse<Response>();\n\n if (exception instanceof HttpException) {\n const statusCode = exception.getStatus();\n const errorResponse = exception.getResponse();\n\n return response.status(statusCode).json(errorResponse);\n }\n\n response.status(HttpStatus.INTERNAL_SERVER_ERROR).json({\n message: 'Something went wrong.',\n error: 'Internal Server Error',\n statusCode: HttpStatus.INTERNAL_SERVER_ERROR,\n });\n }\n}\n","import type { IncomingMessage, ServerResponse } from 'http';\nimport type { Params as NestJsPinoParams } from 'nestjs-pino';\nimport { OPTIONS_TYPE } from './module-definition';\nimport { RequestMethod } from '@nestjs/common';\n\nexport function makePinoParams(options: typeof OPTIONS_TYPE): NestJsPinoParams {\n return {\n pinoHttp: {\n level: options.level,\n timestamp: false,\n transport: {\n target: 'pino-pretty',\n options: {\n colorize: false,\n ignore: 'pid,hostname,req,res,responseTime,reqId',\n messageFormat: '{msg}',\n },\n },\n customSuccessMessage: makeSuccessMessage,\n customErrorMessage: makeErrorMessage,\n customAttributeKeys: {\n err: 'error',\n },\n },\n forRoutes: [\n {\n path: '*',\n method: RequestMethod.ALL,\n },\n ],\n };\n}\n\nfunction makeSuccessMessage(req: IncomingMessage, res: ServerResponse, responseTime: number): string {\n return `[Http] ${req.method} ${req.url} ${res.statusCode} (${responseTime}ms)`;\n}\n\nfunction makeErrorMessage(req: IncomingMessage, res: ServerResponse): string {\n return `[Http] ${req.method} ${req.url} ${res.statusCode}`;\n}\n","import { ConsoleLogger, Inject, Injectable, Scope } from '@nestjs/common';\nimport { Logger as PinoNestLogger } from 'nestjs-pino';\nimport { LoggerContexts } from './types';\n\n@Injectable({\n scope: Scope.TRANSIENT,\n})\nexport class LoggerService extends ConsoleLogger {\n @Inject(PinoNestLogger)\n private readonly logger: PinoNestLogger;\n\n private print(fnName: string, message: any, context?: string) {\n const ctx = context?.replace(/^_/, '') || this.context || '';\n\n const ctxBlacklist: string[] = [\n LoggerContexts.INSTANCE_LOADER,\n LoggerContexts.ROUTES_RESOLVER,\n LoggerContexts.ROUTER_EXPLORER,\n ];\n\n if (ctxBlacklist.includes(ctx)) {\n return;\n }\n\n const ctxMessageMap: Record<string, string> = {\n [LoggerContexts.NEST_FACTORY]: 'Application is starting...',\n [LoggerContexts.NEST_APPLICATION]: 'Application started.',\n };\n\n const msg = ctxMessageMap[ctx] || message || '';\n\n return this.logger[fnName](`[${ctx}] ${msg}`);\n }\n\n log(message: any, context?: string) {\n this.print('log', message, context);\n }\n\n error(message: any, context?: string) {\n this.print('error', message, context);\n }\n\n warn(message: any, context?: string) {\n this.print('warn', message, context);\n }\n\n debug(message: any, context?: string) {\n this.print('debug', message, context);\n }\n\n verbose(message: any, context?: string) {\n this.print('verbose', message, context);\n }\n\n fatal(message: any, context?: string) {\n this.print('fatal', message, context);\n }\n}\n","export type LoggerConfig = {\n level: 'fatal' | 'error' | 'warn' | 'info' | 'debug' | 'trace';\n};\n\nexport enum LoggerContexts {\n SYSTEM = 'System',\n INSTANCE_LOADER = 'InstanceLoader',\n ROUTES_RESOLVER = 'RoutesResolver',\n ROUTER_EXPLORER = 'RouterExplorer',\n NEST_FACTORY = 'NestFactory',\n NEST_APPLICATION = 'NestApplication',\n}\n"],"mappings":"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","names":["Global","Module","APP_FILTER","LoggerModule","NestJsPinoLoggerModule","ConfigurableModuleBuilder","ConfigurableModuleClass","MODULE_OPTIONS_TOKEN","OPTIONS_TYPE","ASYNC_OPTIONS_TYPE","build","Catch","HttpException","HttpStatus","LoggerExceptionFilter","catch","exception","host","response","switchToHttp","getResponse","HttpException","statusCode","getStatus","errorResponse","status","json","HttpStatus","INTERNAL_SERVER_ERROR","message","error","RequestMethod","makePinoParams","options","pinoHttp","level","timestamp","transport","target","colorize","ignore","messageFormat","customSuccessMessage","makeSuccessMessage","customErrorMessage","makeErrorMessage","customAttributeKeys","err","forRoutes","path","method","RequestMethod","ALL","req","res","responseTime","url","statusCode","ConsoleLogger","Inject","Injectable","Scope","Logger","PinoNestLogger","LoggerContexts","LoggerService","ConsoleLogger","logger","print","fnName","message","context","ctx","replace","LoggerContexts","INSTANCE_LOADER","ROUTES_RESOLVER","ROUTER_EXPLORER","includes","msg","NEST_FACTORY","NEST_APPLICATION","log","error","warn","debug","verbose","fatal","scope","Scope","TRANSIENT","LoggerModule","ConfigurableModuleClass","register","options","base","imports","NestJsPinoLoggerModule","forRoot","makePinoParams","registerAsync","forRootAsync","inject","useFactory","__name","args","config","providers","LoggerService","provide","APP_FILTER","useClass","LoggerExceptionFilter","exports"]}
1
+ {"version":3,"sources":["../src/module.ts","../src/module-definition.ts","../src/exception-filter.ts","../src/builder.ts","../src/service.ts","../src/types.ts"],"sourcesContent":["import { DynamicModule, Global, Module } from '@nestjs/common';\nimport { APP_FILTER } from '@nestjs/core';\nimport { LoggerModule as NestJsPinoLoggerModule } from 'nestjs-pino';\nimport { ASYNC_OPTIONS_TYPE, ConfigurableModuleClass, OPTIONS_TYPE } from './module-definition';\nimport { LoggerExceptionFilter } from './exception-filter';\nimport { makePinoParams } from './builder';\nimport { LoggerService } from './service';\nimport type { LoggerConfig } from './types';\n\n@Global()\n@Module({\n providers: [LoggerService, { provide: APP_FILTER, useClass: LoggerExceptionFilter }],\n exports: [LoggerService],\n})\nexport class LoggerModule extends ConfigurableModuleClass {\n static register(options: typeof OPTIONS_TYPE): DynamicModule {\n const base = super.register(options);\n\n return {\n ...base,\n imports: [...(base.imports ?? []), NestJsPinoLoggerModule.forRoot(makePinoParams(options))],\n };\n }\n\n static registerAsync(options: typeof ASYNC_OPTIONS_TYPE): DynamicModule {\n const base = super.registerAsync(options);\n\n return {\n ...base,\n imports: [\n ...(base.imports ?? []),\n NestJsPinoLoggerModule.forRootAsync({\n imports: options.imports,\n inject: options.inject,\n useFactory: async (...args: unknown[]) => {\n if (options.useFactory) {\n const config = await options.useFactory(...args);\n\n return makePinoParams(config);\n }\n\n return makePinoParams({} as LoggerConfig);\n },\n }),\n ],\n };\n }\n}\n","import { ConfigurableModuleBuilder } from '@nestjs/common';\nimport { LoggerConfig } from './types';\n\nexport const { ConfigurableModuleClass, MODULE_OPTIONS_TOKEN, OPTIONS_TYPE, ASYNC_OPTIONS_TYPE } =\n new ConfigurableModuleBuilder<LoggerConfig>().build();\n","import { type ArgumentsHost, Catch, type ExceptionFilter, HttpException, HttpStatus } from '@nestjs/common';\nimport type { Response } from 'express';\n\n@Catch()\nexport class LoggerExceptionFilter implements ExceptionFilter {\n catch(exception: any, host: ArgumentsHost) {\n const ctx = host.switchToHttp();\n const response = ctx.getResponse<Response>();\n\n if (exception instanceof HttpException) {\n const statusCode = exception.getStatus();\n const errorResponse = exception.getResponse();\n\n return response.status(statusCode).json(errorResponse);\n }\n\n response.status(HttpStatus.INTERNAL_SERVER_ERROR).json({\n message: 'Something went wrong.',\n error: 'Internal Server Error',\n statusCode: HttpStatus.INTERNAL_SERVER_ERROR,\n });\n }\n}\n","import type { IncomingMessage, ServerResponse } from 'http';\nimport type { AxiosError, AxiosRequestConfig, AxiosResponse } from 'axios';\nimport type { Params as NestJsPinoParams } from 'nestjs-pino';\nimport { OPTIONS_TYPE } from './module-definition';\nimport { RequestMethod } from '@nestjs/common';\nimport { HttpMessageBuilder } from '@iamnnort/config/http';\n\nfunction toAxiosConfig(req: IncomingMessage): AxiosRequestConfig {\n const expressReq = req as IncomingMessage & { body?: unknown };\n\n return {\n url: req.url,\n method: req.method,\n data: expressReq.body,\n } as AxiosRequestConfig;\n}\n\nfunction toAxiosResponse(req: IncomingMessage, res: ServerResponse): AxiosResponse {\n return {\n status: res.statusCode,\n statusText: res.statusMessage,\n data: undefined,\n headers: {},\n config: toAxiosConfig(req),\n } as AxiosResponse;\n}\n\nfunction toAxiosError(req: IncomingMessage, res: ServerResponse, error: Error): AxiosError {\n return {\n ...error,\n name: error.name,\n message: error.message,\n response: toAxiosResponse(req, res),\n config: toAxiosConfig(req),\n } as AxiosError;\n}\n\nexport function makePinoParams(options: typeof OPTIONS_TYPE): NestJsPinoParams {\n return {\n pinoHttp: {\n name: 'Http',\n level: options.level,\n timestamp: false,\n transport: {\n target: 'pino-pretty',\n options: {\n colorize: false,\n ignore: 'pid,hostname,req,res,responseTime,reqId',\n },\n },\n customSuccessMessage: (req, res, duration) => {\n const response = toAxiosResponse(req, res);\n\n const messageBuilder = new HttpMessageBuilder({\n response,\n duration,\n });\n\n const message = messageBuilder.makeMethodText().makeUrlText().makeStatusText().makeDurationText().build();\n\n return message;\n },\n customSuccessObject: (req, res) => {\n const response = toAxiosResponse(req, res);\n\n const messageBuilder = new HttpMessageBuilder({\n response,\n });\n\n const data = {};\n\n const requestData = messageBuilder.makeRequestDataObj();\n\n if (Object.keys(requestData).length > 0) {\n data['request'] = requestData;\n }\n\n return data;\n },\n customErrorMessage: (req, res, error) => {\n const axiosError = toAxiosError(req, res, error);\n\n const messageBuilder = new HttpMessageBuilder({\n error: axiosError,\n });\n\n const message = messageBuilder.makeMethodText().makeUrlText().makeStatusText().build();\n\n return message;\n },\n customAttributeKeys: {\n err: 'error',\n },\n },\n forRoutes: [\n {\n path: '*',\n method: RequestMethod.ALL,\n },\n ],\n };\n}\n","import { ConsoleLogger, Inject, Injectable, Scope } from '@nestjs/common';\nimport { PinoLogger } from 'nestjs-pino';\nimport { LoggerContexts } from './types';\n\n@Injectable({\n scope: Scope.TRANSIENT,\n})\nexport class LoggerService extends ConsoleLogger {\n @Inject(PinoLogger)\n private readonly pinoLogger: PinoLogger;\n\n private print(level: string, message: any, context?: string) {\n const ctx = context?.replace(/^_/, '') || this.context || '';\n\n const ctxBlacklist: string[] = [\n LoggerContexts.INSTANCE_LOADER,\n LoggerContexts.ROUTES_RESOLVER,\n LoggerContexts.ROUTER_EXPLORER,\n ];\n\n if (ctxBlacklist.includes(ctx)) {\n return;\n }\n\n const ctxMessageMap: Record<string, string> = {\n [LoggerContexts.NEST_FACTORY]: 'Application is starting...',\n [LoggerContexts.NEST_APPLICATION]: 'Application started.',\n };\n\n const msg = ctxMessageMap[ctx] || message || '';\n\n const logger = ctx ? this.pinoLogger.logger.child({ name: ctx }) : this.pinoLogger.logger;\n\n logger[level](msg);\n }\n\n log(message: any, context?: string) {\n this.print('info', message, context);\n }\n\n error(message: any, context?: string) {\n this.print('error', message, context);\n }\n\n warn(message: any, context?: string) {\n this.print('warn', message, context);\n }\n\n debug(message: any, context?: string) {\n this.print('debug', message, context);\n }\n\n verbose(message: any, context?: string) {\n this.print('trace', message, context);\n }\n\n fatal(message: any, context?: string) {\n this.print('fatal', message, context);\n }\n}\n","export type LoggerConfig = {\n level: LoggerLevels;\n};\n\nexport enum LoggerLevels {\n FATAL = 'fatal',\n ERROR = 'error',\n WARN = 'warn',\n INFO = 'info',\n DEBUG = 'debug',\n TRACE = 'trace',\n}\n\nexport enum LoggerContexts {\n SYSTEM = 'System',\n INSTANCE_LOADER = 'InstanceLoader',\n ROUTES_RESOLVER = 'RoutesResolver',\n ROUTER_EXPLORER = 'RouterExplorer',\n NEST_FACTORY = 'NestFactory',\n NEST_APPLICATION = 'NestApplication',\n}\n"],"mappings":"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","names":["Global","Module","APP_FILTER","LoggerModule","NestJsPinoLoggerModule","ConfigurableModuleBuilder","ConfigurableModuleClass","MODULE_OPTIONS_TOKEN","OPTIONS_TYPE","ASYNC_OPTIONS_TYPE","build","Catch","HttpException","HttpStatus","LoggerExceptionFilter","catch","exception","host","response","switchToHttp","getResponse","HttpException","statusCode","getStatus","errorResponse","status","json","HttpStatus","INTERNAL_SERVER_ERROR","message","error","RequestMethod","HttpMessageBuilder","toAxiosConfig","req","expressReq","url","method","data","body","toAxiosResponse","res","status","statusCode","statusText","statusMessage","undefined","headers","config","toAxiosError","error","name","message","response","makePinoParams","options","pinoHttp","level","timestamp","transport","target","colorize","ignore","customSuccessMessage","__name","duration","HttpMessageBuilder","makeMethodText","makeUrlText","makeStatusText","makeDurationText","build","customSuccessObject","messageBuilder","requestData","makeRequestDataObj","Object","keys","length","customErrorMessage","axiosError","customAttributeKeys","err","forRoutes","path","RequestMethod","ALL","ConsoleLogger","Inject","Injectable","Scope","PinoLogger","LoggerLevels","LoggerContexts","LoggerService","ConsoleLogger","pinoLogger","print","level","message","context","ctx","replace","LoggerContexts","INSTANCE_LOADER","ROUTES_RESOLVER","ROUTER_EXPLORER","includes","msg","NEST_FACTORY","NEST_APPLICATION","logger","child","name","log","error","warn","debug","verbose","fatal","scope","Scope","TRANSIENT","LoggerModule","ConfigurableModuleClass","register","options","base","imports","NestJsPinoLoggerModule","forRoot","makePinoParams","registerAsync","forRootAsync","inject","useFactory","__name","args","config","providers","LoggerService","provide","APP_FILTER","useClass","LoggerExceptionFilter","exports"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@iamnnort/nestjs-logger",
3
- "version": "2.1.2",
3
+ "version": "2.1.3",
4
4
  "description": "Logger module for NestJS - Simple - Informative - Pretty",
5
5
  "license": "MIT",
6
6
  "repository": {
@@ -32,17 +32,16 @@
32
32
  "prepare": "husky"
33
33
  },
34
34
  "dependencies": {
35
+ "@iamnnort/config": "^1.1.10",
35
36
  "nestjs-pino": "^4.5.0",
36
37
  "pino-http": "^10.4.0",
37
38
  "pino-pretty": "^13.1.3"
38
39
  },
39
40
  "devDependencies": {
40
- "@iamnnort/config": "^1.0.0",
41
41
  "@nestjs/common": "^11.1.0",
42
42
  "@nestjs/core": "^11.1.0",
43
43
  "@swc/core": "^1.15.11",
44
44
  "@types/express": "^5.0.1",
45
- "@types/lodash": "^4.17.16",
46
45
  "@types/node": "^25.2.3",
47
46
  "eslint": "^9.24.0",
48
47
  "husky": "^9.1.7",
@@ -56,7 +55,6 @@
56
55
  "peerDependencies": {
57
56
  "@nestjs/common": "^11.1.0",
58
57
  "@nestjs/core": "^11.1.0",
59
- "pino": "^9.0.0 || ^10.0.0",
60
58
  "reflect-metadata": "^0.2.2",
61
59
  "rxjs": "^7.8.2"
62
60
  }