@iamnnort/nestjs-logger 1.4.0 → 1.4.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.d.mts +4 -3
- package/dist/index.d.ts +4 -3
- package/dist/index.js +43 -27
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +43 -27
- package/dist/index.mjs.map +1 -1
- package/package.json +3 -1
package/dist/index.d.mts
CHANGED
|
@@ -5,10 +5,11 @@ import { Request, Response } from 'express';
|
|
|
5
5
|
|
|
6
6
|
type LoggerConfig = {
|
|
7
7
|
context?: string;
|
|
8
|
+
forbiddenKeys?: string[];
|
|
9
|
+
logResponse?: boolean;
|
|
8
10
|
serializer?: {
|
|
9
|
-
array
|
|
11
|
+
array: 'indices' | 'brackets' | 'repeat' | 'comma';
|
|
10
12
|
};
|
|
11
|
-
forbiddenKeys?: string[];
|
|
12
13
|
};
|
|
13
14
|
declare enum LoggerContexts {
|
|
14
15
|
SYSTEM = "System",
|
|
@@ -27,7 +28,7 @@ declare class LoggerModule extends ConfigurableModuleClass {
|
|
|
27
28
|
|
|
28
29
|
declare class LoggerService extends ConsoleLogger {
|
|
29
30
|
private config;
|
|
30
|
-
constructor(
|
|
31
|
+
constructor(customConfig?: LoggerConfig);
|
|
31
32
|
log(message: string, context?: string): void;
|
|
32
33
|
logRequest(request: InternalAxiosRequestConfig & Request): void;
|
|
33
34
|
logResponse(response: AxiosResponse & Response): void;
|
package/dist/index.d.ts
CHANGED
|
@@ -5,10 +5,11 @@ import { Request, Response } from 'express';
|
|
|
5
5
|
|
|
6
6
|
type LoggerConfig = {
|
|
7
7
|
context?: string;
|
|
8
|
+
forbiddenKeys?: string[];
|
|
9
|
+
logResponse?: boolean;
|
|
8
10
|
serializer?: {
|
|
9
|
-
array
|
|
11
|
+
array: 'indices' | 'brackets' | 'repeat' | 'comma';
|
|
10
12
|
};
|
|
11
|
-
forbiddenKeys?: string[];
|
|
12
13
|
};
|
|
13
14
|
declare enum LoggerContexts {
|
|
14
15
|
SYSTEM = "System",
|
|
@@ -27,7 +28,7 @@ declare class LoggerModule extends ConfigurableModuleClass {
|
|
|
27
28
|
|
|
28
29
|
declare class LoggerService extends ConsoleLogger {
|
|
29
30
|
private config;
|
|
30
|
-
constructor(
|
|
31
|
+
constructor(customConfig?: LoggerConfig);
|
|
31
32
|
log(message: string, context?: string): void;
|
|
32
33
|
logRequest(request: InternalAxiosRequestConfig & Request): void;
|
|
33
34
|
logResponse(response: AxiosResponse & Response): void;
|
package/dist/index.js
CHANGED
|
@@ -54,26 +54,26 @@ var MessageBuilder = class {
|
|
|
54
54
|
const params = _optionalChain([this, 'access', _16 => _16.request, 'optionalAccess', _17 => _17.params]) || _optionalChain([this, 'access', _18 => _18.response, 'optionalAccess', _19 => _19.config, 'optionalAccess', _20 => _20.params]) || _optionalChain([this, 'access', _21 => _21.error, 'optionalAccess', _22 => _22.response, 'optionalAccess', _23 => _23.config, 'access', _24 => _24.params]);
|
|
55
55
|
if (url) {
|
|
56
56
|
if (params) {
|
|
57
|
+
const formattedParams = {
|
|
58
|
+
...params
|
|
59
|
+
};
|
|
57
60
|
const systemKeys = [
|
|
58
61
|
"0",
|
|
59
62
|
"path"
|
|
60
63
|
];
|
|
61
|
-
const forbiddenKeys = [
|
|
62
|
-
|
|
63
|
-
...this.config.forbiddenKeys || []
|
|
64
|
-
];
|
|
65
|
-
Object.keys(params).forEach((paramKey) => {
|
|
64
|
+
const forbiddenKeys = this.config.forbiddenKeys || [];
|
|
65
|
+
Object.keys(formattedParams).forEach((paramKey) => {
|
|
66
66
|
if (forbiddenKeys.includes(paramKey)) {
|
|
67
|
-
|
|
67
|
+
formattedParams[paramKey] = "******";
|
|
68
68
|
}
|
|
69
69
|
if (systemKeys.includes(paramKey)) {
|
|
70
|
-
delete
|
|
70
|
+
delete formattedParams[paramKey];
|
|
71
71
|
}
|
|
72
72
|
});
|
|
73
73
|
this.printQueue.push([
|
|
74
74
|
url,
|
|
75
|
-
_qs.stringify.call(void 0,
|
|
76
|
-
arrayFormat: _optionalChain([this, 'access', _25 => _25.config, 'access', _26 => _26.serializer, 'optionalAccess', _27 => _27.array])
|
|
75
|
+
_qs.stringify.call(void 0, formattedParams, {
|
|
76
|
+
arrayFormat: _optionalChain([this, 'access', _25 => _25.config, 'access', _26 => _26.serializer, 'optionalAccess', _27 => _27.array]),
|
|
77
77
|
skipNulls: true
|
|
78
78
|
})
|
|
79
79
|
].filter((_) => _).join("?"));
|
|
@@ -98,16 +98,16 @@ var MessageBuilder = class {
|
|
|
98
98
|
return this;
|
|
99
99
|
}
|
|
100
100
|
if (Object.keys(data).length) {
|
|
101
|
-
const
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
];
|
|
105
|
-
Object.keys(
|
|
101
|
+
const formattedData = {
|
|
102
|
+
...data
|
|
103
|
+
};
|
|
104
|
+
const forbiddenKeys = this.config.forbiddenKeys || [];
|
|
105
|
+
Object.keys(formattedData).forEach((dataKey) => {
|
|
106
106
|
if (forbiddenKeys.includes(dataKey)) {
|
|
107
|
-
|
|
107
|
+
formattedData[dataKey] = "******";
|
|
108
108
|
}
|
|
109
109
|
});
|
|
110
|
-
this.printQueue.push(JSON.stringify(
|
|
110
|
+
this.printQueue.push(JSON.stringify(formattedData));
|
|
111
111
|
return this;
|
|
112
112
|
}
|
|
113
113
|
}
|
|
@@ -121,16 +121,16 @@ var MessageBuilder = class {
|
|
|
121
121
|
return this;
|
|
122
122
|
}
|
|
123
123
|
if (Object.keys(data).length) {
|
|
124
|
-
const
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
];
|
|
128
|
-
Object.keys(
|
|
124
|
+
const formattedData = {
|
|
125
|
+
...data
|
|
126
|
+
};
|
|
127
|
+
const forbiddenKeys = this.config.forbiddenKeys || [];
|
|
128
|
+
Object.keys(formattedData).forEach((dataKey) => {
|
|
129
129
|
if (forbiddenKeys.includes(dataKey)) {
|
|
130
|
-
|
|
130
|
+
formattedData[dataKey] = "******";
|
|
131
131
|
}
|
|
132
132
|
});
|
|
133
|
-
this.printQueue.push(JSON.stringify(
|
|
133
|
+
this.printQueue.push(JSON.stringify(formattedData));
|
|
134
134
|
return this;
|
|
135
135
|
}
|
|
136
136
|
}
|
|
@@ -157,6 +157,7 @@ var MessageBuilder = class {
|
|
|
157
157
|
var { ConfigurableModuleClass, MODULE_OPTIONS_TOKEN } = new (0, _common.ConfigurableModuleBuilder)().build();
|
|
158
158
|
|
|
159
159
|
// src/service.ts
|
|
160
|
+
var _lodash = require('lodash');
|
|
160
161
|
function _ts_decorate(decorators, target, key, desc) {
|
|
161
162
|
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
162
163
|
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
@@ -179,9 +180,20 @@ var LoggerService = class extends _common.ConsoleLogger {
|
|
|
179
180
|
__name(this, "LoggerService");
|
|
180
181
|
}
|
|
181
182
|
|
|
182
|
-
constructor(
|
|
183
|
-
const
|
|
184
|
-
|
|
183
|
+
constructor(customConfig = {}) {
|
|
184
|
+
const defaultConfig = {
|
|
185
|
+
context: LoggerContexts.SYSTEM,
|
|
186
|
+
forbiddenKeys: [
|
|
187
|
+
"password"
|
|
188
|
+
],
|
|
189
|
+
logResponse: true,
|
|
190
|
+
serializer: {
|
|
191
|
+
array: "brackets"
|
|
192
|
+
}
|
|
193
|
+
};
|
|
194
|
+
const config = _lodash.merge.call(void 0, {}, defaultConfig, customConfig);
|
|
195
|
+
super(config.context);
|
|
196
|
+
this.config = config;
|
|
185
197
|
}
|
|
186
198
|
log(message, context) {
|
|
187
199
|
const ctx = _optionalChain([context, 'optionalAccess', _73 => _73.replace, 'call', _74 => _74(/^_/, "")]) || this.context || "";
|
|
@@ -210,7 +222,11 @@ var LoggerService = class extends _common.ConsoleLogger {
|
|
|
210
222
|
}
|
|
211
223
|
logResponse(response) {
|
|
212
224
|
const loggerMessageBuilder = new MessageBuilder(this.config);
|
|
213
|
-
const
|
|
225
|
+
const loggerMesage = loggerMessageBuilder.setResponse(response).makeType("Response").makeMethod().makeUrl().makeRequestData().makeStatus();
|
|
226
|
+
if (this.config.logResponse) {
|
|
227
|
+
loggerMesage.makeResponseData();
|
|
228
|
+
}
|
|
229
|
+
const message = loggerMesage.build();
|
|
214
230
|
return this.log(message);
|
|
215
231
|
}
|
|
216
232
|
logRequestError(error) {
|
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/service.ts","../src/types.ts","../src/message/builder.ts","../src/module-definition.ts","../src/middleware.ts"],"names":["LoggerContexts","MessageBuilder","printQueue","request","response","error","constructor","config","setRequest","setResponse","setError","makeType","type","push","makeUrl","url","originalUrl","req","params","systemKeys","forbiddenKeys","Object","keys","forEach","paramKey","includes","stringify","arrayFormat","serializer","array","skipNulls","filter","_","join","makeMethod","method","toUpperCase","makeRequestData","data","body","length","dataKey","JSON","makeResponseData","makeStatus","status","statusCode","ConfigurableModuleBuilder","ConfigurableModuleClass","ConsoleLogger","context","replace","INSTANCE_LOADER","ROUTER_EXPLORER","ROUTES_RESOLVER","NEST_FACTORY","NEST_APPLICATION","ctxMessageMap","ctx","loggerMessageBuilder","message","TRANSIENT","Injectable","LoggerMiddleware","loggerService","next","logRequest","logResponse","LoggerService"],"mappings":"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","file":"/home/runner/work/nestjs-logger/nestjs-logger/dist/index.js","sourcesContent":[null,"import { Global, MiddlewareConsumer, Module } from '@nestjs/common';\nimport { LoggerService } from './service';\nimport { LoggerMiddleware } from './middleware';\nimport { ConfigurableModuleClass } from './module-definition';\n\n@Global()\n@Module({\n providers: [LoggerService],\n exports: [LoggerService],\n})\nexport class LoggerModule extends ConfigurableModuleClass {\n configure(consumer: MiddlewareConsumer) {\n consumer.apply(LoggerMiddleware).forRoutes('*');\n }\n}\n","import { ConsoleLogger, Inject, Injectable, Scope } from '@nestjs/common';\nimport { AxiosError, AxiosResponse, InternalAxiosRequestConfig } from 'axios';\nimport { type LoggerConfig, LoggerContexts } from './types';\nimport { Request, Response } from 'express';\nimport { MessageBuilder } from './message/builder';\nimport { MODULE_OPTIONS_TOKEN } from './module-definition';\n\n@Injectable({\n scope: Scope.TRANSIENT,\n})\nexport class LoggerService extends ConsoleLogger {\n constructor(@Inject(MODULE_OPTIONS_TOKEN) private config: LoggerConfig = {}) {\n const ctx = config.context || LoggerContexts.SYSTEM;\n\n super(ctx);\n }\n\n log(message: string, context?: string) {\n const ctx = context?.replace(/^_/, '') || this.context || '';\n\n const ctxBlacklist: string[] = [\n LoggerContexts.INSTANCE_LOADER,\n LoggerContexts.ROUTER_EXPLORER,\n LoggerContexts.ROUTES_RESOLVER,\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 ctxMessage = ctxMessageMap[ctx];\n\n if (ctxMessage) {\n return console.log(`[${LoggerContexts.SYSTEM}] ${ctxMessage}`);\n }\n\n return console.log(`[${ctx}] ${message}`);\n }\n\n logRequest(request: InternalAxiosRequestConfig & Request) {\n const loggerMessageBuilder = new MessageBuilder(this.config);\n\n const message = loggerMessageBuilder\n .setRequest(request)\n .makeType('Request')\n .makeMethod()\n .makeUrl()\n .makeRequestData()\n .build();\n\n return this.log(message);\n }\n\n logResponse(response: AxiosResponse & Response) {\n const loggerMessageBuilder = new MessageBuilder(this.config);\n\n const message = loggerMessageBuilder\n .setResponse(response)\n .makeType('Response')\n .makeMethod()\n .makeUrl()\n .makeRequestData()\n .makeStatus()\n .makeResponseData()\n .build();\n\n return this.log(message);\n }\n\n logRequestError(error: AxiosError) {\n const loggerMessageBuilder = new MessageBuilder(this.config);\n\n const message = loggerMessageBuilder\n .setError(error)\n .makeType('Error')\n .makeMethod()\n .makeUrl()\n .makeRequestData()\n .makeStatus()\n .makeResponseData()\n .build();\n\n return this.log(message);\n }\n}\n","export type LoggerConfig = {\n context?: string;\n serializer?: {\n array?: 'indices' | 'brackets' | 'repeat' | 'comma';\n };\n forbiddenKeys?: string[];\n};\n\nexport enum LoggerContexts {\n SYSTEM = 'System',\n INSTANCE_LOADER = 'InstanceLoader',\n ROUTER_EXPLORER = 'RouterExplorer',\n ROUTES_RESOLVER = 'RoutesResolver',\n NEST_FACTORY = 'NestFactory',\n NEST_APPLICATION = 'NestApplication',\n}\n","import { stringify } from 'qs';\nimport { AxiosError, AxiosResponse, InternalAxiosRequestConfig } from 'axios';\nimport { Response, Request } from 'express';\nimport { LoggerConfig } from '@src/types';\n\nexport class MessageBuilder {\n private printQueue: string[] = [];\n\n private request!: InternalAxiosRequestConfig & Request;\n private response!: AxiosResponse & Response;\n private error!: AxiosError;\n\n constructor(private config: LoggerConfig = {}) {}\n\n setRequest(request: InternalAxiosRequestConfig & Request) {\n this.request = request;\n\n return this;\n }\n\n setResponse(response: AxiosResponse & Response) {\n this.response = response;\n\n return this;\n }\n\n setError(error: AxiosError) {\n this.error = error;\n\n return this;\n }\n\n makeType(type: string) {\n this.printQueue.push(`[${type}]`);\n\n return this;\n }\n\n makeUrl() {\n const url =\n this.request?.originalUrl ||\n this.response?.req?.originalUrl ||\n this.request?.url ||\n this.response?.config?.url ||\n this.error?.response?.config.url;\n\n const params = this.request?.params || this.response?.config?.params || this.error?.response?.config.params;\n\n if (url) {\n if (params) {\n const systemKeys = ['0', 'path'];\n const forbiddenKeys = ['password', ...(this.config.forbiddenKeys || [])];\n\n Object.keys(params).forEach((paramKey) => {\n if (forbiddenKeys.includes(paramKey)) {\n params[paramKey] = '******';\n }\n\n if (systemKeys.includes(paramKey)) {\n delete params[paramKey];\n }\n });\n\n this.printQueue.push(\n [\n url,\n stringify(params, {\n arrayFormat: this.config.serializer?.array || 'brackets',\n skipNulls: true,\n }),\n ]\n .filter((_) => _)\n .join('?'),\n );\n } else {\n this.printQueue.push(url);\n }\n }\n\n return this;\n }\n\n makeMethod() {\n const method =\n this.request?.method ||\n this.response?.req?.method ||\n this.response?.config?.method ||\n this.error?.response?.config.method;\n\n if (method) {\n this.printQueue.push(method.toUpperCase());\n }\n\n return this;\n }\n\n makeRequestData() {\n const data =\n this.request?.body ||\n this.response?.req?.body ||\n this.request?.data ||\n this.response?.config?.data ||\n this.error?.response?.config.data;\n\n if (data) {\n if (typeof data === 'string') {\n this.printQueue.push(data);\n\n return this;\n }\n\n if (Object.keys(data).length) {\n const forbiddenKeys = ['password', ...(this.config.forbiddenKeys || [])];\n\n Object.keys(data).forEach((dataKey) => {\n if (forbiddenKeys.includes(dataKey)) {\n data[dataKey] = '******';\n }\n });\n\n this.printQueue.push(JSON.stringify(data));\n\n return this;\n }\n }\n\n return this;\n }\n\n makeResponseData() {\n const data = this.response?.data || this.error?.response?.data;\n\n if (data) {\n if (typeof data === 'string') {\n this.printQueue.push(data);\n\n return this;\n }\n\n if (Object.keys(data).length) {\n const forbiddenKeys = ['password', ...(this.config.forbiddenKeys || [])];\n\n Object.keys(data).forEach((dataKey) => {\n if (forbiddenKeys.includes(dataKey)) {\n data[dataKey] = '******';\n }\n });\n\n this.printQueue.push(JSON.stringify(data));\n\n return this;\n }\n }\n\n return this;\n }\n\n makeStatus() {\n const status = this.response?.statusCode || this.response?.status || this.error?.response?.status;\n\n if (status) {\n this.printQueue.push(`${status}`);\n\n const statusText = this.response?.statusMessage || this.response?.statusText || this.error?.response?.statusText;\n\n if (statusText) {\n this.printQueue.push(statusText);\n }\n }\n\n return this;\n }\n\n build() {\n return this.printQueue.join(' ');\n }\n}\n","import { ConfigurableModuleBuilder } from '@nestjs/common';\nimport { LoggerConfig } from './types';\n\nexport const { ConfigurableModuleClass, MODULE_OPTIONS_TOKEN } = new ConfigurableModuleBuilder<LoggerConfig>().build();\n","import { Injectable, NestMiddleware } from '@nestjs/common';\nimport { Request, Response, NextFunction } from 'express';\nimport { LoggerService } from './service';\n\n@Injectable()\nexport class LoggerMiddleware implements NestMiddleware {\n constructor(private loggerService: LoggerService) {}\n\n use(request: Request, response: Response, next: NextFunction) {\n this.loggerService.logRequest(request as any);\n\n response.on('finish', () => {\n this.loggerService.logResponse(response as any);\n });\n\n return next();\n }\n}\n"]}
|
|
1
|
+
{"version":3,"sources":["/home/runner/work/nestjs-logger/nestjs-logger/dist/index.js","../src/module.ts","../src/service.ts","../src/types.ts","../src/message/builder.ts","../src/module-definition.ts","../src/middleware.ts"],"names":["LoggerContexts","MessageBuilder","printQueue","request","response","error","constructor","config","setRequest","setResponse","setError","makeType","type","push","makeUrl","url","originalUrl","req","params","formattedParams","systemKeys","forbiddenKeys","Object","keys","forEach","paramKey","includes","stringify","arrayFormat","serializer","array","skipNulls","filter","_","join","makeMethod","method","toUpperCase","makeRequestData","data","body","length","formattedData","dataKey","JSON","makeResponseData","makeStatus","status","statusCode","ConfigurableModuleBuilder","ConfigurableModuleClass","ConsoleLogger","customConfig","replace","INSTANCE_LOADER","ROUTER_EXPLORER","ROUTES_RESOLVER","NEST_FACTORY","NEST_APPLICATION","ctxMessageMap","ctx","loggerMessageBuilder","message","logResponse","loggerMesage","TRANSIENT","Injectable","LoggerMiddleware","loggerService","next","logRequest","LoggerService"],"mappings":"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","file":"/home/runner/work/nestjs-logger/nestjs-logger/dist/index.js","sourcesContent":[null,"import { Global, MiddlewareConsumer, Module } from '@nestjs/common';\nimport { LoggerService } from './service';\nimport { LoggerMiddleware } from './middleware';\nimport { ConfigurableModuleClass } from './module-definition';\n\n@Global()\n@Module({\n providers: [LoggerService],\n exports: [LoggerService],\n})\nexport class LoggerModule extends ConfigurableModuleClass {\n configure(consumer: MiddlewareConsumer) {\n consumer.apply(LoggerMiddleware).forRoutes('*');\n }\n}\n","import { ConsoleLogger, Inject, Injectable, Scope } from '@nestjs/common';\nimport { AxiosError, AxiosResponse, InternalAxiosRequestConfig } from 'axios';\nimport { type LoggerConfig, LoggerContexts } from './types';\nimport { Request, Response } from 'express';\nimport { MessageBuilder } from './message/builder';\nimport { MODULE_OPTIONS_TOKEN } from './module-definition';\nimport { merge } from 'lodash';\n\n@Injectable({\n scope: Scope.TRANSIENT,\n})\nexport class LoggerService extends ConsoleLogger {\n private config: LoggerConfig;\n\n constructor(@Inject(MODULE_OPTIONS_TOKEN) customConfig: LoggerConfig = {}) {\n const defaultConfig = {\n context: LoggerContexts.SYSTEM,\n forbiddenKeys: ['password'],\n logResponse: true,\n serializer: {\n array: 'brackets',\n },\n };\n\n const config = merge({}, defaultConfig, customConfig);\n\n super(config.context);\n\n this.config = config;\n }\n\n log(message: string, context?: string) {\n const ctx = context?.replace(/^_/, '') || this.context || '';\n\n const ctxBlacklist: string[] = [\n LoggerContexts.INSTANCE_LOADER,\n LoggerContexts.ROUTER_EXPLORER,\n LoggerContexts.ROUTES_RESOLVER,\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 ctxMessage = ctxMessageMap[ctx];\n\n if (ctxMessage) {\n return console.log(`[${LoggerContexts.SYSTEM}] ${ctxMessage}`);\n }\n\n return console.log(`[${ctx}] ${message}`);\n }\n\n logRequest(request: InternalAxiosRequestConfig & Request) {\n const loggerMessageBuilder = new MessageBuilder(this.config);\n\n const message = loggerMessageBuilder\n .setRequest(request)\n .makeType('Request')\n .makeMethod()\n .makeUrl()\n .makeRequestData()\n .build();\n\n return this.log(message);\n }\n\n logResponse(response: AxiosResponse & Response) {\n const loggerMessageBuilder = new MessageBuilder(this.config);\n\n const loggerMesage = loggerMessageBuilder\n .setResponse(response)\n .makeType('Response')\n .makeMethod()\n .makeUrl()\n .makeRequestData()\n .makeStatus();\n\n if (this.config.logResponse) {\n loggerMesage.makeResponseData();\n }\n\n const message = loggerMesage.build();\n\n return this.log(message);\n }\n\n logRequestError(error: AxiosError) {\n const loggerMessageBuilder = new MessageBuilder(this.config);\n\n const message = loggerMessageBuilder\n .setError(error)\n .makeType('Error')\n .makeMethod()\n .makeUrl()\n .makeRequestData()\n .makeStatus()\n .makeResponseData()\n .build();\n\n return this.log(message);\n }\n}\n","export type LoggerConfig = {\n context?: string;\n forbiddenKeys?: string[];\n logResponse?: boolean;\n serializer?: {\n array: 'indices' | 'brackets' | 'repeat' | 'comma';\n };\n};\n\nexport enum LoggerContexts {\n SYSTEM = 'System',\n INSTANCE_LOADER = 'InstanceLoader',\n ROUTER_EXPLORER = 'RouterExplorer',\n ROUTES_RESOLVER = 'RoutesResolver',\n NEST_FACTORY = 'NestFactory',\n NEST_APPLICATION = 'NestApplication',\n}\n","import { stringify } from 'qs';\nimport { AxiosError, AxiosResponse, InternalAxiosRequestConfig } from 'axios';\nimport { Response, Request } from 'express';\nimport { LoggerConfig } from '@src/types';\n\nexport class MessageBuilder {\n private printQueue: string[] = [];\n\n private request!: InternalAxiosRequestConfig & Request;\n private response!: AxiosResponse & Response;\n private error!: AxiosError;\n\n constructor(private config: LoggerConfig = {}) {}\n\n setRequest(request: InternalAxiosRequestConfig & Request) {\n this.request = request;\n\n return this;\n }\n\n setResponse(response: AxiosResponse & Response) {\n this.response = response;\n\n return this;\n }\n\n setError(error: AxiosError) {\n this.error = error;\n\n return this;\n }\n\n makeType(type: string) {\n this.printQueue.push(`[${type}]`);\n\n return this;\n }\n\n makeUrl() {\n const url =\n this.request?.originalUrl ||\n this.response?.req?.originalUrl ||\n this.request?.url ||\n this.response?.config?.url ||\n this.error?.response?.config.url;\n\n const params = this.request?.params || this.response?.config?.params || this.error?.response?.config.params;\n\n if (url) {\n if (params) {\n const formattedParams = { ...params };\n const systemKeys = ['0', 'path'];\n const forbiddenKeys = this.config.forbiddenKeys || [];\n\n Object.keys(formattedParams).forEach((paramKey) => {\n if (forbiddenKeys.includes(paramKey)) {\n formattedParams[paramKey] = '******';\n }\n\n if (systemKeys.includes(paramKey)) {\n delete formattedParams[paramKey];\n }\n });\n\n this.printQueue.push(\n [\n url,\n stringify(formattedParams, {\n arrayFormat: this.config.serializer?.array,\n skipNulls: true,\n }),\n ]\n .filter((_) => _)\n .join('?'),\n );\n } else {\n this.printQueue.push(url);\n }\n }\n\n return this;\n }\n\n makeMethod() {\n const method =\n this.request?.method ||\n this.response?.req?.method ||\n this.response?.config?.method ||\n this.error?.response?.config.method;\n\n if (method) {\n this.printQueue.push(method.toUpperCase());\n }\n\n return this;\n }\n\n makeRequestData() {\n const data =\n this.request?.body ||\n this.response?.req?.body ||\n this.request?.data ||\n this.response?.config?.data ||\n this.error?.response?.config.data;\n\n if (data) {\n if (typeof data === 'string') {\n this.printQueue.push(data);\n\n return this;\n }\n\n if (Object.keys(data).length) {\n const formattedData = { ...data };\n const forbiddenKeys = this.config.forbiddenKeys || [];\n\n Object.keys(formattedData).forEach((dataKey) => {\n if (forbiddenKeys.includes(dataKey)) {\n formattedData[dataKey] = '******';\n }\n });\n\n this.printQueue.push(JSON.stringify(formattedData));\n\n return this;\n }\n }\n\n return this;\n }\n\n makeResponseData() {\n const data = this.response?.data || this.error?.response?.data;\n\n if (data) {\n if (typeof data === 'string') {\n this.printQueue.push(data);\n\n return this;\n }\n\n if (Object.keys(data).length) {\n const formattedData = { ...data };\n const forbiddenKeys = this.config.forbiddenKeys || [];\n\n Object.keys(formattedData).forEach((dataKey) => {\n if (forbiddenKeys.includes(dataKey)) {\n formattedData[dataKey] = '******';\n }\n });\n\n this.printQueue.push(JSON.stringify(formattedData));\n\n return this;\n }\n }\n\n return this;\n }\n\n makeStatus() {\n const status = this.response?.statusCode || this.response?.status || this.error?.response?.status;\n\n if (status) {\n this.printQueue.push(`${status}`);\n\n const statusText = this.response?.statusMessage || this.response?.statusText || this.error?.response?.statusText;\n\n if (statusText) {\n this.printQueue.push(statusText);\n }\n }\n\n return this;\n }\n\n build() {\n return this.printQueue.join(' ');\n }\n}\n","import { ConfigurableModuleBuilder } from '@nestjs/common';\nimport { LoggerConfig } from './types';\n\nexport const { ConfigurableModuleClass, MODULE_OPTIONS_TOKEN } = new ConfigurableModuleBuilder<LoggerConfig>().build();\n","import { Injectable, NestMiddleware } from '@nestjs/common';\nimport { Request, Response, NextFunction } from 'express';\nimport { LoggerService } from './service';\n\n@Injectable()\nexport class LoggerMiddleware implements NestMiddleware {\n constructor(private loggerService: LoggerService) {}\n\n use(request: Request, response: Response, next: NextFunction) {\n this.loggerService.logRequest(request as any);\n\n response.on('finish', () => {\n this.loggerService.logResponse(response as any);\n });\n\n return next();\n }\n}\n"]}
|
package/dist/index.mjs
CHANGED
|
@@ -54,26 +54,26 @@ var MessageBuilder = class {
|
|
|
54
54
|
const params = this.request?.params || this.response?.config?.params || this.error?.response?.config.params;
|
|
55
55
|
if (url) {
|
|
56
56
|
if (params) {
|
|
57
|
+
const formattedParams = {
|
|
58
|
+
...params
|
|
59
|
+
};
|
|
57
60
|
const systemKeys = [
|
|
58
61
|
"0",
|
|
59
62
|
"path"
|
|
60
63
|
];
|
|
61
|
-
const forbiddenKeys = [
|
|
62
|
-
|
|
63
|
-
...this.config.forbiddenKeys || []
|
|
64
|
-
];
|
|
65
|
-
Object.keys(params).forEach((paramKey) => {
|
|
64
|
+
const forbiddenKeys = this.config.forbiddenKeys || [];
|
|
65
|
+
Object.keys(formattedParams).forEach((paramKey) => {
|
|
66
66
|
if (forbiddenKeys.includes(paramKey)) {
|
|
67
|
-
|
|
67
|
+
formattedParams[paramKey] = "******";
|
|
68
68
|
}
|
|
69
69
|
if (systemKeys.includes(paramKey)) {
|
|
70
|
-
delete
|
|
70
|
+
delete formattedParams[paramKey];
|
|
71
71
|
}
|
|
72
72
|
});
|
|
73
73
|
this.printQueue.push([
|
|
74
74
|
url,
|
|
75
|
-
stringify(
|
|
76
|
-
arrayFormat: this.config.serializer?.array
|
|
75
|
+
stringify(formattedParams, {
|
|
76
|
+
arrayFormat: this.config.serializer?.array,
|
|
77
77
|
skipNulls: true
|
|
78
78
|
})
|
|
79
79
|
].filter((_) => _).join("?"));
|
|
@@ -98,16 +98,16 @@ var MessageBuilder = class {
|
|
|
98
98
|
return this;
|
|
99
99
|
}
|
|
100
100
|
if (Object.keys(data).length) {
|
|
101
|
-
const
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
];
|
|
105
|
-
Object.keys(
|
|
101
|
+
const formattedData = {
|
|
102
|
+
...data
|
|
103
|
+
};
|
|
104
|
+
const forbiddenKeys = this.config.forbiddenKeys || [];
|
|
105
|
+
Object.keys(formattedData).forEach((dataKey) => {
|
|
106
106
|
if (forbiddenKeys.includes(dataKey)) {
|
|
107
|
-
|
|
107
|
+
formattedData[dataKey] = "******";
|
|
108
108
|
}
|
|
109
109
|
});
|
|
110
|
-
this.printQueue.push(JSON.stringify(
|
|
110
|
+
this.printQueue.push(JSON.stringify(formattedData));
|
|
111
111
|
return this;
|
|
112
112
|
}
|
|
113
113
|
}
|
|
@@ -121,16 +121,16 @@ var MessageBuilder = class {
|
|
|
121
121
|
return this;
|
|
122
122
|
}
|
|
123
123
|
if (Object.keys(data).length) {
|
|
124
|
-
const
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
];
|
|
128
|
-
Object.keys(
|
|
124
|
+
const formattedData = {
|
|
125
|
+
...data
|
|
126
|
+
};
|
|
127
|
+
const forbiddenKeys = this.config.forbiddenKeys || [];
|
|
128
|
+
Object.keys(formattedData).forEach((dataKey) => {
|
|
129
129
|
if (forbiddenKeys.includes(dataKey)) {
|
|
130
|
-
|
|
130
|
+
formattedData[dataKey] = "******";
|
|
131
131
|
}
|
|
132
132
|
});
|
|
133
|
-
this.printQueue.push(JSON.stringify(
|
|
133
|
+
this.printQueue.push(JSON.stringify(formattedData));
|
|
134
134
|
return this;
|
|
135
135
|
}
|
|
136
136
|
}
|
|
@@ -157,6 +157,7 @@ import { ConfigurableModuleBuilder } from "@nestjs/common";
|
|
|
157
157
|
var { ConfigurableModuleClass, MODULE_OPTIONS_TOKEN } = new ConfigurableModuleBuilder().build();
|
|
158
158
|
|
|
159
159
|
// src/service.ts
|
|
160
|
+
import { merge } from "lodash";
|
|
160
161
|
function _ts_decorate(decorators, target, key, desc) {
|
|
161
162
|
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
162
163
|
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
@@ -179,9 +180,20 @@ var LoggerService = class extends ConsoleLogger {
|
|
|
179
180
|
__name(this, "LoggerService");
|
|
180
181
|
}
|
|
181
182
|
config;
|
|
182
|
-
constructor(
|
|
183
|
-
const
|
|
184
|
-
|
|
183
|
+
constructor(customConfig = {}) {
|
|
184
|
+
const defaultConfig = {
|
|
185
|
+
context: LoggerContexts.SYSTEM,
|
|
186
|
+
forbiddenKeys: [
|
|
187
|
+
"password"
|
|
188
|
+
],
|
|
189
|
+
logResponse: true,
|
|
190
|
+
serializer: {
|
|
191
|
+
array: "brackets"
|
|
192
|
+
}
|
|
193
|
+
};
|
|
194
|
+
const config = merge({}, defaultConfig, customConfig);
|
|
195
|
+
super(config.context);
|
|
196
|
+
this.config = config;
|
|
185
197
|
}
|
|
186
198
|
log(message, context) {
|
|
187
199
|
const ctx = context?.replace(/^_/, "") || this.context || "";
|
|
@@ -210,7 +222,11 @@ var LoggerService = class extends ConsoleLogger {
|
|
|
210
222
|
}
|
|
211
223
|
logResponse(response) {
|
|
212
224
|
const loggerMessageBuilder = new MessageBuilder(this.config);
|
|
213
|
-
const
|
|
225
|
+
const loggerMesage = loggerMessageBuilder.setResponse(response).makeType("Response").makeMethod().makeUrl().makeRequestData().makeStatus();
|
|
226
|
+
if (this.config.logResponse) {
|
|
227
|
+
loggerMesage.makeResponseData();
|
|
228
|
+
}
|
|
229
|
+
const message = loggerMesage.build();
|
|
214
230
|
return this.log(message);
|
|
215
231
|
}
|
|
216
232
|
logRequestError(error) {
|
package/dist/index.mjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/module.ts","../src/service.ts","../src/types.ts","../src/message/builder.ts","../src/module-definition.ts","../src/middleware.ts"],"sourcesContent":["import { Global, MiddlewareConsumer, Module } from '@nestjs/common';\nimport { LoggerService } from './service';\nimport { LoggerMiddleware } from './middleware';\nimport { ConfigurableModuleClass } from './module-definition';\n\n@Global()\n@Module({\n providers: [LoggerService],\n exports: [LoggerService],\n})\nexport class LoggerModule extends ConfigurableModuleClass {\n configure(consumer: MiddlewareConsumer) {\n consumer.apply(LoggerMiddleware).forRoutes('*');\n }\n}\n","import { ConsoleLogger, Inject, Injectable, Scope } from '@nestjs/common';\nimport { AxiosError, AxiosResponse, InternalAxiosRequestConfig } from 'axios';\nimport { type LoggerConfig, LoggerContexts } from './types';\nimport { Request, Response } from 'express';\nimport { MessageBuilder } from './message/builder';\nimport { MODULE_OPTIONS_TOKEN } from './module-definition';\n\n@Injectable({\n scope: Scope.TRANSIENT,\n})\nexport class LoggerService extends ConsoleLogger {\n constructor(@Inject(MODULE_OPTIONS_TOKEN) private config: LoggerConfig = {}) {\n const ctx = config.context || LoggerContexts.SYSTEM;\n\n super(ctx);\n }\n\n log(message: string, context?: string) {\n const ctx = context?.replace(/^_/, '') || this.context || '';\n\n const ctxBlacklist: string[] = [\n LoggerContexts.INSTANCE_LOADER,\n LoggerContexts.ROUTER_EXPLORER,\n LoggerContexts.ROUTES_RESOLVER,\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 ctxMessage = ctxMessageMap[ctx];\n\n if (ctxMessage) {\n return console.log(`[${LoggerContexts.SYSTEM}] ${ctxMessage}`);\n }\n\n return console.log(`[${ctx}] ${message}`);\n }\n\n logRequest(request: InternalAxiosRequestConfig & Request) {\n const loggerMessageBuilder = new MessageBuilder(this.config);\n\n const message = loggerMessageBuilder\n .setRequest(request)\n .makeType('Request')\n .makeMethod()\n .makeUrl()\n .makeRequestData()\n .build();\n\n return this.log(message);\n }\n\n logResponse(response: AxiosResponse & Response) {\n const loggerMessageBuilder = new MessageBuilder(this.config);\n\n const message = loggerMessageBuilder\n .setResponse(response)\n .makeType('Response')\n .makeMethod()\n .makeUrl()\n .makeRequestData()\n .makeStatus()\n .makeResponseData()\n .build();\n\n return this.log(message);\n }\n\n logRequestError(error: AxiosError) {\n const loggerMessageBuilder = new MessageBuilder(this.config);\n\n const message = loggerMessageBuilder\n .setError(error)\n .makeType('Error')\n .makeMethod()\n .makeUrl()\n .makeRequestData()\n .makeStatus()\n .makeResponseData()\n .build();\n\n return this.log(message);\n }\n}\n","export type LoggerConfig = {\n context?: string;\n serializer?: {\n array?: 'indices' | 'brackets' | 'repeat' | 'comma';\n };\n forbiddenKeys?: string[];\n};\n\nexport enum LoggerContexts {\n SYSTEM = 'System',\n INSTANCE_LOADER = 'InstanceLoader',\n ROUTER_EXPLORER = 'RouterExplorer',\n ROUTES_RESOLVER = 'RoutesResolver',\n NEST_FACTORY = 'NestFactory',\n NEST_APPLICATION = 'NestApplication',\n}\n","import { stringify } from 'qs';\nimport { AxiosError, AxiosResponse, InternalAxiosRequestConfig } from 'axios';\nimport { Response, Request } from 'express';\nimport { LoggerConfig } from '@src/types';\n\nexport class MessageBuilder {\n private printQueue: string[] = [];\n\n private request!: InternalAxiosRequestConfig & Request;\n private response!: AxiosResponse & Response;\n private error!: AxiosError;\n\n constructor(private config: LoggerConfig = {}) {}\n\n setRequest(request: InternalAxiosRequestConfig & Request) {\n this.request = request;\n\n return this;\n }\n\n setResponse(response: AxiosResponse & Response) {\n this.response = response;\n\n return this;\n }\n\n setError(error: AxiosError) {\n this.error = error;\n\n return this;\n }\n\n makeType(type: string) {\n this.printQueue.push(`[${type}]`);\n\n return this;\n }\n\n makeUrl() {\n const url =\n this.request?.originalUrl ||\n this.response?.req?.originalUrl ||\n this.request?.url ||\n this.response?.config?.url ||\n this.error?.response?.config.url;\n\n const params = this.request?.params || this.response?.config?.params || this.error?.response?.config.params;\n\n if (url) {\n if (params) {\n const systemKeys = ['0', 'path'];\n const forbiddenKeys = ['password', ...(this.config.forbiddenKeys || [])];\n\n Object.keys(params).forEach((paramKey) => {\n if (forbiddenKeys.includes(paramKey)) {\n params[paramKey] = '******';\n }\n\n if (systemKeys.includes(paramKey)) {\n delete params[paramKey];\n }\n });\n\n this.printQueue.push(\n [\n url,\n stringify(params, {\n arrayFormat: this.config.serializer?.array || 'brackets',\n skipNulls: true,\n }),\n ]\n .filter((_) => _)\n .join('?'),\n );\n } else {\n this.printQueue.push(url);\n }\n }\n\n return this;\n }\n\n makeMethod() {\n const method =\n this.request?.method ||\n this.response?.req?.method ||\n this.response?.config?.method ||\n this.error?.response?.config.method;\n\n if (method) {\n this.printQueue.push(method.toUpperCase());\n }\n\n return this;\n }\n\n makeRequestData() {\n const data =\n this.request?.body ||\n this.response?.req?.body ||\n this.request?.data ||\n this.response?.config?.data ||\n this.error?.response?.config.data;\n\n if (data) {\n if (typeof data === 'string') {\n this.printQueue.push(data);\n\n return this;\n }\n\n if (Object.keys(data).length) {\n const forbiddenKeys = ['password', ...(this.config.forbiddenKeys || [])];\n\n Object.keys(data).forEach((dataKey) => {\n if (forbiddenKeys.includes(dataKey)) {\n data[dataKey] = '******';\n }\n });\n\n this.printQueue.push(JSON.stringify(data));\n\n return this;\n }\n }\n\n return this;\n }\n\n makeResponseData() {\n const data = this.response?.data || this.error?.response?.data;\n\n if (data) {\n if (typeof data === 'string') {\n this.printQueue.push(data);\n\n return this;\n }\n\n if (Object.keys(data).length) {\n const forbiddenKeys = ['password', ...(this.config.forbiddenKeys || [])];\n\n Object.keys(data).forEach((dataKey) => {\n if (forbiddenKeys.includes(dataKey)) {\n data[dataKey] = '******';\n }\n });\n\n this.printQueue.push(JSON.stringify(data));\n\n return this;\n }\n }\n\n return this;\n }\n\n makeStatus() {\n const status = this.response?.statusCode || this.response?.status || this.error?.response?.status;\n\n if (status) {\n this.printQueue.push(`${status}`);\n\n const statusText = this.response?.statusMessage || this.response?.statusText || this.error?.response?.statusText;\n\n if (statusText) {\n this.printQueue.push(statusText);\n }\n }\n\n return this;\n }\n\n build() {\n return this.printQueue.join(' ');\n }\n}\n","import { ConfigurableModuleBuilder } from '@nestjs/common';\nimport { LoggerConfig } from './types';\n\nexport const { ConfigurableModuleClass, MODULE_OPTIONS_TOKEN } = new ConfigurableModuleBuilder<LoggerConfig>().build();\n","import { Injectable, NestMiddleware } from '@nestjs/common';\nimport { Request, Response, NextFunction } from 'express';\nimport { LoggerService } from './service';\n\n@Injectable()\nexport class LoggerMiddleware implements NestMiddleware {\n constructor(private loggerService: LoggerService) {}\n\n use(request: Request, response: Response, next: NextFunction) {\n this.loggerService.logRequest(request as any);\n\n response.on('finish', () => {\n this.loggerService.logResponse(response as any);\n });\n\n return next();\n }\n}\n"],"mappings":"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","names":["Global","Module","ConsoleLogger","Inject","Injectable","Scope","LoggerContexts","stringify","MessageBuilder","printQueue","request","response","error","constructor","config","setRequest","setResponse","setError","makeType","type","push","makeUrl","url","originalUrl","req","params","systemKeys","forbiddenKeys","Object","keys","forEach","paramKey","includes","stringify","arrayFormat","serializer","array","skipNulls","filter","_","join","makeMethod","method","toUpperCase","makeRequestData","data","body","length","dataKey","JSON","makeResponseData","makeStatus","status","statusCode","statusText","statusMessage","build","ConfigurableModuleBuilder","ConfigurableModuleClass","MODULE_OPTIONS_TOKEN","build","LoggerService","ConsoleLogger","constructor","config","ctx","context","LoggerContexts","SYSTEM","log","message","replace","ctxBlacklist","INSTANCE_LOADER","ROUTER_EXPLORER","ROUTES_RESOLVER","includes","ctxMessageMap","NEST_FACTORY","NEST_APPLICATION","ctxMessage","console","logRequest","request","loggerMessageBuilder","MessageBuilder","setRequest","makeType","makeMethod","makeUrl","makeRequestData","build","logResponse","response","setResponse","makeStatus","makeResponseData","logRequestError","error","setError","scope","Scope","TRANSIENT","Injectable","LoggerMiddleware","constructor","loggerService","use","request","response","next","logRequest","on","logResponse","LoggerModule","ConfigurableModuleClass","configure","consumer","apply","LoggerMiddleware","forRoutes","providers","LoggerService","exports"]}
|
|
1
|
+
{"version":3,"sources":["../src/module.ts","../src/service.ts","../src/types.ts","../src/message/builder.ts","../src/module-definition.ts","../src/middleware.ts"],"sourcesContent":["import { Global, MiddlewareConsumer, Module } from '@nestjs/common';\nimport { LoggerService } from './service';\nimport { LoggerMiddleware } from './middleware';\nimport { ConfigurableModuleClass } from './module-definition';\n\n@Global()\n@Module({\n providers: [LoggerService],\n exports: [LoggerService],\n})\nexport class LoggerModule extends ConfigurableModuleClass {\n configure(consumer: MiddlewareConsumer) {\n consumer.apply(LoggerMiddleware).forRoutes('*');\n }\n}\n","import { ConsoleLogger, Inject, Injectable, Scope } from '@nestjs/common';\nimport { AxiosError, AxiosResponse, InternalAxiosRequestConfig } from 'axios';\nimport { type LoggerConfig, LoggerContexts } from './types';\nimport { Request, Response } from 'express';\nimport { MessageBuilder } from './message/builder';\nimport { MODULE_OPTIONS_TOKEN } from './module-definition';\nimport { merge } from 'lodash';\n\n@Injectable({\n scope: Scope.TRANSIENT,\n})\nexport class LoggerService extends ConsoleLogger {\n private config: LoggerConfig;\n\n constructor(@Inject(MODULE_OPTIONS_TOKEN) customConfig: LoggerConfig = {}) {\n const defaultConfig = {\n context: LoggerContexts.SYSTEM,\n forbiddenKeys: ['password'],\n logResponse: true,\n serializer: {\n array: 'brackets',\n },\n };\n\n const config = merge({}, defaultConfig, customConfig);\n\n super(config.context);\n\n this.config = config;\n }\n\n log(message: string, context?: string) {\n const ctx = context?.replace(/^_/, '') || this.context || '';\n\n const ctxBlacklist: string[] = [\n LoggerContexts.INSTANCE_LOADER,\n LoggerContexts.ROUTER_EXPLORER,\n LoggerContexts.ROUTES_RESOLVER,\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 ctxMessage = ctxMessageMap[ctx];\n\n if (ctxMessage) {\n return console.log(`[${LoggerContexts.SYSTEM}] ${ctxMessage}`);\n }\n\n return console.log(`[${ctx}] ${message}`);\n }\n\n logRequest(request: InternalAxiosRequestConfig & Request) {\n const loggerMessageBuilder = new MessageBuilder(this.config);\n\n const message = loggerMessageBuilder\n .setRequest(request)\n .makeType('Request')\n .makeMethod()\n .makeUrl()\n .makeRequestData()\n .build();\n\n return this.log(message);\n }\n\n logResponse(response: AxiosResponse & Response) {\n const loggerMessageBuilder = new MessageBuilder(this.config);\n\n const loggerMesage = loggerMessageBuilder\n .setResponse(response)\n .makeType('Response')\n .makeMethod()\n .makeUrl()\n .makeRequestData()\n .makeStatus();\n\n if (this.config.logResponse) {\n loggerMesage.makeResponseData();\n }\n\n const message = loggerMesage.build();\n\n return this.log(message);\n }\n\n logRequestError(error: AxiosError) {\n const loggerMessageBuilder = new MessageBuilder(this.config);\n\n const message = loggerMessageBuilder\n .setError(error)\n .makeType('Error')\n .makeMethod()\n .makeUrl()\n .makeRequestData()\n .makeStatus()\n .makeResponseData()\n .build();\n\n return this.log(message);\n }\n}\n","export type LoggerConfig = {\n context?: string;\n forbiddenKeys?: string[];\n logResponse?: boolean;\n serializer?: {\n array: 'indices' | 'brackets' | 'repeat' | 'comma';\n };\n};\n\nexport enum LoggerContexts {\n SYSTEM = 'System',\n INSTANCE_LOADER = 'InstanceLoader',\n ROUTER_EXPLORER = 'RouterExplorer',\n ROUTES_RESOLVER = 'RoutesResolver',\n NEST_FACTORY = 'NestFactory',\n NEST_APPLICATION = 'NestApplication',\n}\n","import { stringify } from 'qs';\nimport { AxiosError, AxiosResponse, InternalAxiosRequestConfig } from 'axios';\nimport { Response, Request } from 'express';\nimport { LoggerConfig } from '@src/types';\n\nexport class MessageBuilder {\n private printQueue: string[] = [];\n\n private request!: InternalAxiosRequestConfig & Request;\n private response!: AxiosResponse & Response;\n private error!: AxiosError;\n\n constructor(private config: LoggerConfig = {}) {}\n\n setRequest(request: InternalAxiosRequestConfig & Request) {\n this.request = request;\n\n return this;\n }\n\n setResponse(response: AxiosResponse & Response) {\n this.response = response;\n\n return this;\n }\n\n setError(error: AxiosError) {\n this.error = error;\n\n return this;\n }\n\n makeType(type: string) {\n this.printQueue.push(`[${type}]`);\n\n return this;\n }\n\n makeUrl() {\n const url =\n this.request?.originalUrl ||\n this.response?.req?.originalUrl ||\n this.request?.url ||\n this.response?.config?.url ||\n this.error?.response?.config.url;\n\n const params = this.request?.params || this.response?.config?.params || this.error?.response?.config.params;\n\n if (url) {\n if (params) {\n const formattedParams = { ...params };\n const systemKeys = ['0', 'path'];\n const forbiddenKeys = this.config.forbiddenKeys || [];\n\n Object.keys(formattedParams).forEach((paramKey) => {\n if (forbiddenKeys.includes(paramKey)) {\n formattedParams[paramKey] = '******';\n }\n\n if (systemKeys.includes(paramKey)) {\n delete formattedParams[paramKey];\n }\n });\n\n this.printQueue.push(\n [\n url,\n stringify(formattedParams, {\n arrayFormat: this.config.serializer?.array,\n skipNulls: true,\n }),\n ]\n .filter((_) => _)\n .join('?'),\n );\n } else {\n this.printQueue.push(url);\n }\n }\n\n return this;\n }\n\n makeMethod() {\n const method =\n this.request?.method ||\n this.response?.req?.method ||\n this.response?.config?.method ||\n this.error?.response?.config.method;\n\n if (method) {\n this.printQueue.push(method.toUpperCase());\n }\n\n return this;\n }\n\n makeRequestData() {\n const data =\n this.request?.body ||\n this.response?.req?.body ||\n this.request?.data ||\n this.response?.config?.data ||\n this.error?.response?.config.data;\n\n if (data) {\n if (typeof data === 'string') {\n this.printQueue.push(data);\n\n return this;\n }\n\n if (Object.keys(data).length) {\n const formattedData = { ...data };\n const forbiddenKeys = this.config.forbiddenKeys || [];\n\n Object.keys(formattedData).forEach((dataKey) => {\n if (forbiddenKeys.includes(dataKey)) {\n formattedData[dataKey] = '******';\n }\n });\n\n this.printQueue.push(JSON.stringify(formattedData));\n\n return this;\n }\n }\n\n return this;\n }\n\n makeResponseData() {\n const data = this.response?.data || this.error?.response?.data;\n\n if (data) {\n if (typeof data === 'string') {\n this.printQueue.push(data);\n\n return this;\n }\n\n if (Object.keys(data).length) {\n const formattedData = { ...data };\n const forbiddenKeys = this.config.forbiddenKeys || [];\n\n Object.keys(formattedData).forEach((dataKey) => {\n if (forbiddenKeys.includes(dataKey)) {\n formattedData[dataKey] = '******';\n }\n });\n\n this.printQueue.push(JSON.stringify(formattedData));\n\n return this;\n }\n }\n\n return this;\n }\n\n makeStatus() {\n const status = this.response?.statusCode || this.response?.status || this.error?.response?.status;\n\n if (status) {\n this.printQueue.push(`${status}`);\n\n const statusText = this.response?.statusMessage || this.response?.statusText || this.error?.response?.statusText;\n\n if (statusText) {\n this.printQueue.push(statusText);\n }\n }\n\n return this;\n }\n\n build() {\n return this.printQueue.join(' ');\n }\n}\n","import { ConfigurableModuleBuilder } from '@nestjs/common';\nimport { LoggerConfig } from './types';\n\nexport const { ConfigurableModuleClass, MODULE_OPTIONS_TOKEN } = new ConfigurableModuleBuilder<LoggerConfig>().build();\n","import { Injectable, NestMiddleware } from '@nestjs/common';\nimport { Request, Response, NextFunction } from 'express';\nimport { LoggerService } from './service';\n\n@Injectable()\nexport class LoggerMiddleware implements NestMiddleware {\n constructor(private loggerService: LoggerService) {}\n\n use(request: Request, response: Response, next: NextFunction) {\n this.loggerService.logRequest(request as any);\n\n response.on('finish', () => {\n this.loggerService.logResponse(response as any);\n });\n\n return next();\n }\n}\n"],"mappings":"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","names":["Global","Module","ConsoleLogger","Inject","Injectable","Scope","LoggerContexts","stringify","MessageBuilder","printQueue","request","response","error","constructor","config","setRequest","setResponse","setError","makeType","type","push","makeUrl","url","originalUrl","req","params","formattedParams","systemKeys","forbiddenKeys","Object","keys","forEach","paramKey","includes","stringify","arrayFormat","serializer","array","skipNulls","filter","_","join","makeMethod","method","toUpperCase","makeRequestData","data","body","length","formattedData","dataKey","JSON","makeResponseData","makeStatus","status","statusCode","statusText","statusMessage","build","ConfigurableModuleBuilder","ConfigurableModuleClass","MODULE_OPTIONS_TOKEN","build","merge","LoggerService","ConsoleLogger","config","constructor","customConfig","defaultConfig","context","LoggerContexts","SYSTEM","forbiddenKeys","logResponse","serializer","array","merge","log","message","ctx","replace","ctxBlacklist","INSTANCE_LOADER","ROUTER_EXPLORER","ROUTES_RESOLVER","includes","ctxMessageMap","NEST_FACTORY","NEST_APPLICATION","ctxMessage","console","logRequest","request","loggerMessageBuilder","MessageBuilder","setRequest","makeType","makeMethod","makeUrl","makeRequestData","build","response","loggerMesage","setResponse","makeStatus","makeResponseData","logRequestError","error","setError","scope","Scope","TRANSIENT","Injectable","LoggerMiddleware","constructor","loggerService","use","request","response","next","logRequest","on","logResponse","LoggerModule","ConfigurableModuleClass","configure","consumer","apply","LoggerMiddleware","forRoutes","providers","LoggerService","exports"]}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@iamnnort/nestjs-logger",
|
|
3
|
-
"version": "1.4.
|
|
3
|
+
"version": "1.4.2",
|
|
4
4
|
"description": "Logger module for NestJS - Simple - Informative - Pretty",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"logger"
|
|
@@ -35,6 +35,7 @@
|
|
|
35
35
|
"dependencies": {
|
|
36
36
|
"@nestjs/common": "^11.0.12",
|
|
37
37
|
"axios": "^1.8.4",
|
|
38
|
+
"lodash": "^4.17.21",
|
|
38
39
|
"qs": "^6.14.0"
|
|
39
40
|
},
|
|
40
41
|
"devDependencies": {
|
|
@@ -43,6 +44,7 @@
|
|
|
43
44
|
"@swc/core": "^1.11.16",
|
|
44
45
|
"@tsconfig/node20": "^20.1.5",
|
|
45
46
|
"@types/express": "^5.0.1",
|
|
47
|
+
"@types/lodash": "^4.17.16",
|
|
46
48
|
"@types/node": "^22.13.17",
|
|
47
49
|
"@typescript-eslint/parser": "^8.29.0",
|
|
48
50
|
"eslint": "^9.23.0",
|