@viplance/nestjs-logger 0.1.3 → 0.1.4
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 +25 -26
- package/dist/entities/log.entity.d.ts +2 -0
- package/dist/entities/log.entity.js +2 -0
- package/dist/entities/log.entity.js.map +1 -1
- package/dist/exception.filter.d.ts +4 -0
- package/dist/exception.filter.js +34 -0
- package/dist/exception.filter.js.map +1 -0
- package/dist/log.interceptor.d.ts +3 -2
- package/dist/log.interceptor.js.map +1 -1
- package/dist/services/log.service.d.ts +8 -6
- package/dist/services/log.service.js +30 -1
- package/dist/services/log.service.js.map +1 -1
- package/dist/services/memory-db.service.d.ts +3 -1
- package/dist/services/memory-db.service.js +12 -8
- package/dist/services/memory-db.service.js.map +1 -1
- package/dist/types/context.type.d.ts +7 -0
- package/dist/types/context.type.js +3 -0
- package/dist/types/context.type.js.map +1 -0
- package/dist/types/index.d.ts +1 -0
- package/dist/types/index.js +1 -0
- package/dist/types/index.js.map +1 -1
- package/package.json +1 -1
- package/src/entities/log.entity.ts +3 -1
- package/src/log.interceptor.ts +3 -6
- package/src/services/log.service.ts +52 -14
- package/src/services/memory-db.service.ts +22 -11
- package/src/types/context.type.ts +7 -0
- package/src/types/index.ts +1 -0
package/README.md
CHANGED
|
@@ -3,34 +3,33 @@
|
|
|
3
3
|
|
|
4
4
|
1. Install the package npm i @viplance/nestjs-logger<br />
|
|
5
5
|
2. Import the module in app.module.ts<br />
|
|
6
|
-
|
|
7
|
-
<br />
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
 })<br />
|
|
14
|
-
 import { LogModule } from '@viplance/nestjs-logger';<br />
|
|
15
|
-
<br />
|
|
16
|
-
 // use the memory to store logs
|
|
17
|
-
 await LogModule.connect(app, {<br />
|
|
18
|
-
  path: '/logs',<br />
|
|
19
|
-
  });<br /><br />
|
|
20
|
-
 // use the database to store logs
|
|
21
|
-
 await LogModule.connect(app, {<br />
|
|
22
|
-
  path: '/logs',<br />
|
|
23
|
-
   database: {<br />
|
|
24
|
-
    type: 'mongodb',<br />
|
|
25
|
-
    host: 'localhost',<br />
|
|
26
|
-
    port: 27017,<br />
|
|
27
|
-
    collection: 'logs'<br />
|
|
28
|
-
   }<br />
|
|
29
|
-
  });<br />
|
|
30
|
-
3. Use the LogService in case of custom logs to debug the application.
|
|
6
|
+
import { LogModule } from '@viplance/nestjs-logger';<br />
|
|
7
|
+
@Module({<br />
|
|
8
|
+
imports: [<br />
|
|
9
|
+
...,<br />
|
|
10
|
+
LogModule,<br />
|
|
11
|
+
]<br />
|
|
12
|
+
})<br />
|
|
31
13
|
<br />
|
|
14
|
+
3. Connect the module in main.ts
|
|
15
|
+
// use the memory to store logs
|
|
16
|
+
await LogModule.connect(app, {<br />
|
|
17
|
+
path: '/logs',<br />
|
|
18
|
+
});<br /><br />
|
|
19
|
+
// use the database to store logs
|
|
20
|
+
await LogModule.connect(app, {<br />
|
|
21
|
+
path: '/logs',<br />
|
|
22
|
+
database: {<br />
|
|
23
|
+
type: 'mongodb',<br />
|
|
24
|
+
host: 'localhost',<br />
|
|
25
|
+
port: 27017,<br />
|
|
26
|
+
collection: 'logs'<br />
|
|
27
|
+
}<br />
|
|
28
|
+
});<br />
|
|
29
|
+
|
|
30
|
+
* `path` and `database` options are optional<br />
|
|
31
|
+
4. Use the LogService in case of custom logs to debug the application.
|
|
32
32
|
<br />
|
|
33
|
-
`path` and `database` options are optional<br />
|
|
34
33
|
The logs could be available at your_application_url/<path><br />
|
|
35
34
|
By default the logs will be stored in memory and deleted when the application stops.<br />
|
|
36
35
|
<br />
|
|
@@ -14,6 +14,8 @@ function createLogEntity(name) {
|
|
|
14
14
|
type: { type: String },
|
|
15
15
|
message: { type: String },
|
|
16
16
|
count: { type: Number, default: 1 },
|
|
17
|
+
context: { type: String, nullable: true },
|
|
18
|
+
trace: { type: String, nullable: true },
|
|
17
19
|
createdAt: { type: Date },
|
|
18
20
|
updatedAt: { type: Date },
|
|
19
21
|
},
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"log.entity.js","sourceRoot":"","sources":["../../src/entities/log.entity.ts"],"names":[],"mappings":";;AAEA,
|
|
1
|
+
{"version":3,"file":"log.entity.js","sourceRoot":"","sources":["../../src/entities/log.entity.ts"],"names":[],"mappings":";;AAEA,0CAkBC;AApBD,qCAA4C;AAE5C,SAAgB,eAAe,CAAC,IAAY;IAC1C,OAAO,IAAI,sBAAY,CAAC;QACtB,IAAI;QACJ,OAAO,EAAE;YACP,GAAG,EAAE;gBACH,IAAI,EAAE,MAAM;gBACZ,QAAQ,EAAE,IAAI;gBACd,OAAO,EAAE,IAAI;aACd;YACD,IAAI,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE;YACtB,OAAO,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE;YACzB,KAAK,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC,EAAE;YACnC,OAAO,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,IAAI,EAAE;YACzC,KAAK,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,IAAI,EAAE;YACvC,SAAS,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE;YACzB,SAAS,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE;SAC1B;KACF,CAAC,CAAC;AACL,CAAC"}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
|
|
3
|
+
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
4
|
+
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
5
|
+
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
|
6
|
+
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
7
|
+
};
|
|
8
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
9
|
+
exports.HttpExceptionFilter = void 0;
|
|
10
|
+
const common_1 = require("@nestjs/common");
|
|
11
|
+
// import { Request, Response } from "express";
|
|
12
|
+
let HttpExceptionFilter = class HttpExceptionFilter {
|
|
13
|
+
catch(exception, host) {
|
|
14
|
+
const ctx = host.switchToHttp();
|
|
15
|
+
const status = exception.getStatus();
|
|
16
|
+
console.log("CTX", ctx);
|
|
17
|
+
console.log("status", status);
|
|
18
|
+
console.log("Exception", exception);
|
|
19
|
+
// const response = ctx.getResponse<Response>();
|
|
20
|
+
// const request = ctx.getRequest<Request>();
|
|
21
|
+
// const status = exception.getStatus();
|
|
22
|
+
// response.status(status).json({
|
|
23
|
+
// statusCode: status,
|
|
24
|
+
// timestamp: new Date().toISOString(),
|
|
25
|
+
// path: request.url,
|
|
26
|
+
// message: exception.message,
|
|
27
|
+
// });
|
|
28
|
+
}
|
|
29
|
+
};
|
|
30
|
+
exports.HttpExceptionFilter = HttpExceptionFilter;
|
|
31
|
+
exports.HttpExceptionFilter = HttpExceptionFilter = __decorate([
|
|
32
|
+
(0, common_1.Catch)(common_1.HttpException)
|
|
33
|
+
], HttpExceptionFilter);
|
|
34
|
+
//# sourceMappingURL=exception.filter.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"exception.filter.js","sourceRoot":"","sources":["../src/exception.filter.ts"],"names":[],"mappings":";;;;;;;;;AAAA,2CAKwB;AACxB,+CAA+C;AAGxC,IAAM,mBAAmB,GAAzB,MAAM,mBAAmB;IAC9B,KAAK,CAAC,SAAwB,EAAE,IAAmB;QACjD,MAAM,GAAG,GAAG,IAAI,CAAC,YAAY,EAAE,CAAC;QAChC,MAAM,MAAM,GAAG,SAAS,CAAC,SAAS,EAAE,CAAC;QACrC,OAAO,CAAC,GAAG,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;QACxB,OAAO,CAAC,GAAG,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;QAC9B,OAAO,CAAC,GAAG,CAAC,WAAW,EAAE,SAAS,CAAC,CAAC;QACpC,gDAAgD;QAChD,6CAA6C;QAC7C,wCAAwC;QAExC,iCAAiC;QACjC,wBAAwB;QACxB,yCAAyC;QACzC,uBAAuB;QACvB,gCAAgC;QAChC,MAAM;IACR,CAAC;CACF,CAAA;AAlBY,kDAAmB;8BAAnB,mBAAmB;IAD/B,IAAA,cAAK,EAAC,sBAAa,CAAC;GACR,mBAAmB,CAkB/B"}
|
|
@@ -1,8 +1,9 @@
|
|
|
1
|
-
import type { CallHandler,
|
|
1
|
+
import type { CallHandler, NestInterceptor } from "@nestjs/common";
|
|
2
2
|
import { Observable } from "rxjs";
|
|
3
3
|
import { LogService } from "./services/log.service";
|
|
4
|
+
import { ExecutionContextHost } from "@nestjs/core/helpers/execution-context-host";
|
|
4
5
|
export declare class LogInterceptor implements NestInterceptor {
|
|
5
6
|
private readonly logService;
|
|
6
7
|
constructor(logService: LogService);
|
|
7
|
-
intercept(context:
|
|
8
|
+
intercept(context: ExecutionContextHost, next: CallHandler): Observable<any>;
|
|
8
9
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"log.interceptor.js","sourceRoot":"","sources":["../src/log.interceptor.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;
|
|
1
|
+
{"version":3,"file":"log.interceptor.js","sourceRoot":"","sources":["../src/log.interceptor.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;AACA,2CAAoD;AACpD,+BAAuC;AACvC,wDAAoD;AAI7C,IAAM,cAAc,GAApB,MAAM,cAAc;IACzB,YAAiD,UAAsB;QAAtB,eAAU,GAAV,UAAU,CAAY;IAAG,CAAC;IAE3E,SAAS,CAAC,OAA6B,EAAE,IAAiB;QACxD,OAAO,IAAI,CAAC,MAAM,EAAE,CAAC,IAAI,CACvB,IAAA,UAAG,EAAC;YACF,KAAK,EAAE,CAAC,KAAK,EAAE,EAAE;;gBACf,gBAAgB;gBAChB,MAAA,IAAI,CAAC,UAAU,0CAAE,KAAK,CAAC,KAAK,CAAC,OAAO,EAAE,KAAK,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;YAC9D,CAAC;YACD,QAAQ,EAAE,GAAG,EAAE;gBACb,iBAAiB;YACnB,CAAC;SACF,CAAC,CACH,CAAC;IACJ,CAAC;CACF,CAAA;AAhBY,wCAAc;yBAAd,cAAc;IAD1B,IAAA,mBAAU,GAAE;IAEE,WAAA,IAAA,eAAM,EAAC,wBAAU,CAAC,CAAA;qCAA8B,wBAAU;GAD5D,cAAc,CAgB1B"}
|
|
@@ -1,19 +1,21 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { LoggerService } from "@nestjs/common";
|
|
2
2
|
import { MemoryDbService } from "./memory-db.service";
|
|
3
3
|
import { LogModuleOptions } from "../types";
|
|
4
4
|
import { DataSource, EntitySchema } from "typeorm";
|
|
5
|
+
import { ExecutionContextHost } from "@nestjs/core/helpers/execution-context-host";
|
|
5
6
|
export declare class LogService implements LoggerService {
|
|
6
7
|
private readonly memoryDbService;
|
|
7
8
|
static connection: DataSource;
|
|
8
9
|
static Log: EntitySchema;
|
|
9
10
|
constructor(memoryDbService: MemoryDbService);
|
|
10
11
|
connectDb(options: LogModuleOptions): Promise<DataSource>;
|
|
11
|
-
log(message: string, context?:
|
|
12
|
-
error(message: string, trace?: string, context?:
|
|
13
|
-
warn(message: string, context?:
|
|
14
|
-
debug(message: string, context?:
|
|
15
|
-
verbose(message: string, context?:
|
|
12
|
+
log(message: string, context?: ExecutionContextHost): void;
|
|
13
|
+
error(message: string, trace?: string, context?: ExecutionContextHost): void;
|
|
14
|
+
warn(message: string, context?: ExecutionContextHost): void;
|
|
15
|
+
debug(message: string, context?: ExecutionContextHost): void;
|
|
16
|
+
verbose(message: string, context?: ExecutionContextHost): void;
|
|
16
17
|
getAll(): Promise<any[]>;
|
|
17
18
|
private smartInsert;
|
|
18
19
|
private getConnection;
|
|
20
|
+
private parseContext;
|
|
19
21
|
}
|
|
@@ -72,7 +72,9 @@ let LogService = LogService_1 = class LogService {
|
|
|
72
72
|
});
|
|
73
73
|
}
|
|
74
74
|
async getAll() {
|
|
75
|
-
return this.getConnection().find(LogService_1.Log
|
|
75
|
+
return this.getConnection().find(LogService_1.Log, {
|
|
76
|
+
select: ["type", "message", "count", "createdAt", "updatedAt"],
|
|
77
|
+
});
|
|
76
78
|
}
|
|
77
79
|
async smartInsert(data) {
|
|
78
80
|
const currentDate = new Date();
|
|
@@ -84,8 +86,11 @@ let LogService = LogService_1 = class LogService {
|
|
|
84
86
|
message: data.message,
|
|
85
87
|
},
|
|
86
88
|
});
|
|
89
|
+
const context = data.context ? this.parseContext(data.context) : undefined;
|
|
87
90
|
if (log) {
|
|
88
91
|
return await connection.update(LogService_1.Log, log._id, {
|
|
92
|
+
context,
|
|
93
|
+
trace: data.trace,
|
|
89
94
|
count: log.count + 1,
|
|
90
95
|
updatedAt: currentDate,
|
|
91
96
|
});
|
|
@@ -93,6 +98,8 @@ let LogService = LogService_1 = class LogService {
|
|
|
93
98
|
return await connection.insert(LogService_1.Log, {
|
|
94
99
|
type: data.type,
|
|
95
100
|
message: data.message,
|
|
101
|
+
context,
|
|
102
|
+
trace: data.trace,
|
|
96
103
|
count: 1,
|
|
97
104
|
createdAt: currentDate,
|
|
98
105
|
updatedAt: currentDate,
|
|
@@ -101,6 +108,28 @@ let LogService = LogService_1 = class LogService {
|
|
|
101
108
|
getConnection() {
|
|
102
109
|
return LogService_1.connection.manager || this.memoryDbService;
|
|
103
110
|
}
|
|
111
|
+
parseContext(context) {
|
|
112
|
+
const res = {};
|
|
113
|
+
const args = context.getArgs();
|
|
114
|
+
for (const arg of args) {
|
|
115
|
+
if (arg.rawHeaders) {
|
|
116
|
+
res.rawHeaders = arg.rawHeaders;
|
|
117
|
+
}
|
|
118
|
+
if (arg.url) {
|
|
119
|
+
res.url = arg.url;
|
|
120
|
+
}
|
|
121
|
+
if (arg.method) {
|
|
122
|
+
res.method = arg.method;
|
|
123
|
+
}
|
|
124
|
+
if (arg.params) {
|
|
125
|
+
res.params = arg.params;
|
|
126
|
+
}
|
|
127
|
+
if (arg.body) {
|
|
128
|
+
res.body = arg.body;
|
|
129
|
+
}
|
|
130
|
+
}
|
|
131
|
+
return res;
|
|
132
|
+
}
|
|
104
133
|
};
|
|
105
134
|
exports.LogService = LogService;
|
|
106
135
|
LogService.Log = (0, log_entity_1.createLogEntity)(defaults_1.defaultTable);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"log.service.js","sourceRoot":"","sources":["../../src/services/log.service.ts"],"names":[],"mappings":";;;;;;;;;;;;;AAAA,
|
|
1
|
+
{"version":3,"file":"log.service.js","sourceRoot":"","sources":["../../src/services/log.service.ts"],"names":[],"mappings":";;;;;;;;;;;;;AAAA,2CAAkE;AAClE,2DAAsD;AACtD,0CAA2C;AAC3C,oCAA8D;AAC9D,qCAKiB;AACjB,uDAAyD;AAIlD,IAAM,UAAU,kBAAhB,MAAM,UAAU;IAIrB,YAA6B,eAAgC;QAAhC,oBAAe,GAAf,eAAe,CAAiB;IAAG,CAAC;IAEjE,KAAK,CAAC,SAAS,CAAC,OAAyB;;QACvC,YAAU,CAAC,GAAG,GAAG,IAAA,4BAAe,EAC9B,CAAA,MAAA,OAAO,CAAC,QAAQ,0CAAE,UAAU,MAAI,MAAA,OAAO,CAAC,QAAQ,0CAAE,KAAK,CAAA,IAAI,uBAAY,CACxE,CAAC;QAEF,MAAM,iBAAiB,GAAG;YACxB,IAAI,EAAE,MAAA,OAAO,CAAC,QAAQ,0CAAE,IAAI;YAC5B,QAAQ,EAAE,MAAA,OAAO,CAAC,QAAQ,0CAAE,QAAQ;YACpC,IAAI,EAAE,MAAA,OAAO,CAAC,QAAQ,0CAAE,IAAI;YAC5B,IAAI,EAAE,MAAA,OAAO,CAAC,QAAQ,0CAAE,IAAI;YAC5B,QAAQ,EAAE,CAAC,YAAU,CAAC,GAAG,CAAC;SACN,CAAC;QAEvB,YAAU,CAAC,UAAU,GAAG,IAAI,oBAAU,CAAC,iBAAiB,CAAC,CAAC;QAE1D,MAAM,YAAU,CAAC,UAAU,CAAC,UAAU,EAAE,CAAC;QAEzC,OAAO,YAAU,CAAC,UAAU,CAAC;IAC/B,CAAC;IAED,GAAG,CAAC,OAAe,EAAE,OAA8B;QACjD,IAAI,CAAC,WAAW,CAAC;YACf,IAAI,EAAE,eAAO,CAAC,GAAG;YACjB,OAAO;YACP,OAAO;SACR,CAAC,CAAC;IACL,CAAC;IAED,KAAK,CAAC,OAAe,EAAE,KAAc,EAAE,OAA8B;QACnE,IAAI,CAAC,WAAW,CAAC;YACf,IAAI,EAAE,eAAO,CAAC,KAAK;YACnB,OAAO;YACP,KAAK;YACL,OAAO;SACR,CAAC,CAAC;IACL,CAAC;IAED,IAAI,CAAC,OAAe,EAAE,OAA8B;QAClD,IAAI,CAAC,WAAW,CAAC;YACf,IAAI,EAAE,eAAO,CAAC,IAAI;YAClB,OAAO;YACP,OAAO;SACR,CAAC,CAAC;IACL,CAAC;IAED,KAAK,CAAC,OAAe,EAAE,OAA8B;QACnD,IAAI,CAAC,WAAW,CAAC;YACf,IAAI,EAAE,eAAO,CAAC,KAAK;YACnB,OAAO;YACP,OAAO;SACR,CAAC,CAAC;IACL,CAAC;IAED,OAAO,CAAC,OAAe,EAAE,OAA8B;QACrD,IAAI,CAAC,WAAW,CAAC;YACf,IAAI,EAAE,eAAO,CAAC,OAAO;YACrB,OAAO;YACP,OAAO;SACR,CAAC,CAAC;IACL,CAAC;IAED,KAAK,CAAC,MAAM;QACV,OAAO,IAAI,CAAC,aAAa,EAAE,CAAC,IAAI,CAAC,YAAU,CAAC,GAAG,EAAE;YAC/C,MAAM,EAAE,CAAC,MAAM,EAAE,SAAS,EAAE,OAAO,EAAE,WAAW,EAAE,WAAW,CAAC;SAC/D,CAAC,CAAC;IACL,CAAC;IAEO,KAAK,CAAC,WAAW,CAAC,IAKzB;QACC,MAAM,WAAW,GAAG,IAAI,IAAI,EAAE,CAAC;QAE/B,MAAM,UAAU,GAAG,IAAI,CAAC,aAAa,EAAE,CAAC;QAExC,0BAA0B;QAC1B,MAAM,GAAG,GAAG,MAAM,UAAU,CAAC,OAAO,CAAC,YAAU,CAAC,GAAG,EAAE;YACnD,KAAK,EAAE;gBACL,IAAI,EAAE,IAAI,CAAC,IAAI;gBACf,OAAO,EAAE,IAAI,CAAC,OAAO;aACtB;SACF,CAAC,CAAC;QAEH,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;QAE3E,IAAI,GAAG,EAAE,CAAC;YACR,OAAO,MAAM,UAAU,CAAC,MAAM,CAAC,YAAU,CAAC,GAAG,EAAE,GAAG,CAAC,GAAG,EAAE;gBACtD,OAAO;gBACP,KAAK,EAAE,IAAI,CAAC,KAAK;gBACjB,KAAK,EAAE,GAAG,CAAC,KAAK,GAAG,CAAC;gBACpB,SAAS,EAAE,WAAW;aACvB,CAAC,CAAC;QACL,CAAC;QAED,OAAO,MAAM,UAAU,CAAC,MAAM,CAAC,YAAU,CAAC,GAAG,EAAE;YAC7C,IAAI,EAAE,IAAI,CAAC,IAAI;YACf,OAAO,EAAE,IAAI,CAAC,OAAO;YACrB,OAAO;YACP,KAAK,EAAE,IAAI,CAAC,KAAK;YACjB,KAAK,EAAE,CAAC;YACR,SAAS,EAAE,WAAW;YACtB,SAAS,EAAE,WAAW;SACvB,CAAC,CAAC;IACL,CAAC;IAEO,aAAa;QACnB,OAAO,YAAU,CAAC,UAAU,CAAC,OAAO,IAAI,IAAI,CAAC,eAAe,CAAC;IAC/D,CAAC;IAEO,YAAY,CAAC,OAA6B;QAChD,MAAM,GAAG,GAAqB,EAAE,CAAC;QACjC,MAAM,IAAI,GAAG,OAAO,CAAC,OAAO,EAAE,CAAC;QAE/B,KAAK,MAAM,GAAG,IAAI,IAAI,EAAE,CAAC;YACvB,IAAI,GAAG,CAAC,UAAU,EAAE,CAAC;gBACnB,GAAG,CAAC,UAAU,GAAG,GAAG,CAAC,UAAU,CAAC;YAClC,CAAC;YAED,IAAI,GAAG,CAAC,GAAG,EAAE,CAAC;gBACZ,GAAG,CAAC,GAAG,GAAG,GAAG,CAAC,GAAG,CAAC;YACpB,CAAC;YAED,IAAI,GAAG,CAAC,MAAM,EAAE,CAAC;gBACf,GAAG,CAAC,MAAM,GAAG,GAAG,CAAC,MAAM,CAAC;YAC1B,CAAC;YAED,IAAI,GAAG,CAAC,MAAM,EAAE,CAAC;gBACf,GAAG,CAAC,MAAM,GAAG,GAAG,CAAC,MAAM,CAAC;YAC1B,CAAC;YAED,IAAI,GAAG,CAAC,IAAI,EAAE,CAAC;gBACb,GAAG,CAAC,IAAI,GAAG,GAAG,CAAC,IAAI,CAAC;YACtB,CAAC;QACH,CAAC;QAED,OAAO,GAAG,CAAC;IACb,CAAC;;AAhJU,gCAAU;AAEd,cAAG,GAAiB,IAAA,4BAAe,EAAC,uBAAY,CAAC,AAA9C,CAA+C;qBAF9C,UAAU;IADtB,IAAA,mBAAU,EAAC,EAAE,KAAK,EAAE,cAAK,CAAC,SAAS,EAAE,CAAC;qCAKS,mCAAe;GAJlD,UAAU,CAiJtB"}
|
|
@@ -4,7 +4,9 @@ export declare class MemoryDbService {
|
|
|
4
4
|
constructor();
|
|
5
5
|
insert(entity: EntitySchema, data: any): string;
|
|
6
6
|
update(entity: EntitySchema, condition: any, data: any): Promise<string>;
|
|
7
|
-
find(entity: EntitySchema
|
|
7
|
+
find(entity: EntitySchema, options?: {
|
|
8
|
+
select?: string[];
|
|
9
|
+
}): Promise<any[]>;
|
|
8
10
|
getOneById(entity: EntitySchema, _id: string): Promise<any>;
|
|
9
11
|
findByProperty(entity: EntitySchema, field: string, value: string): any[];
|
|
10
12
|
findOne(entity: EntitySchema, condition: {
|
|
@@ -52,15 +52,19 @@ let MemoryDbService = class MemoryDbService {
|
|
|
52
52
|
}
|
|
53
53
|
return Promise.reject();
|
|
54
54
|
}
|
|
55
|
-
async find(entity) {
|
|
55
|
+
async find(entity, options) {
|
|
56
56
|
const table = this.getTableName(entity);
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
57
|
+
let mapOptions = (obj) => obj;
|
|
58
|
+
if (options === null || options === void 0 ? void 0 : options.select) {
|
|
59
|
+
mapOptions = (obj) => {
|
|
60
|
+
const newObj = {};
|
|
61
|
+
for (const key of options.select || []) {
|
|
62
|
+
newObj[key] = obj[key];
|
|
63
|
+
}
|
|
64
|
+
return newObj;
|
|
65
|
+
};
|
|
66
|
+
}
|
|
67
|
+
return Promise.resolve(this.db[table].map(mapOptions));
|
|
64
68
|
}
|
|
65
69
|
async getOneById(entity, _id) {
|
|
66
70
|
const table = this.getTableName(entity);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"memory-db.service.js","sourceRoot":"","sources":["../../src/services/memory-db.service.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,kBAAkB;AAClB,2CAA4C;AAC5C,mCAAiD;AACjD,0CAA2C;AAG3C,MAAM,MAAM,GAAG,CAAC,uBAAY,CAAC,CAAC;AAGvB,IAAM,eAAe,GAArB,MAAM,eAAe;IAG1B;QAFQ,OAAE,GAA6B,EAAE,CAAC;
|
|
1
|
+
{"version":3,"file":"memory-db.service.js","sourceRoot":"","sources":["../../src/services/memory-db.service.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"context.type.js","sourceRoot":"","sources":["../../src/types/context.type.ts"],"names":[],"mappings":""}
|
package/dist/types/index.d.ts
CHANGED
package/dist/types/index.js
CHANGED
|
@@ -14,6 +14,7 @@ var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
|
14
14
|
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
|
|
15
15
|
};
|
|
16
16
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
17
|
+
__exportStar(require("./context.type"), exports);
|
|
17
18
|
__exportStar(require("./log.type"), exports);
|
|
18
19
|
__exportStar(require("./options.type"), exports);
|
|
19
20
|
//# sourceMappingURL=index.js.map
|
package/dist/types/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/types/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,6CAA2B;AAC3B,iDAA+B"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/types/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,iDAA+B;AAC/B,6CAA2B;AAC3B,iDAA+B"}
|
package/package.json
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { EntitySchema } from "typeorm";
|
|
1
|
+
import { Any, EntitySchema } from "typeorm";
|
|
2
2
|
|
|
3
3
|
export function createLogEntity(name: string) {
|
|
4
4
|
return new EntitySchema({
|
|
@@ -12,6 +12,8 @@ export function createLogEntity(name: string) {
|
|
|
12
12
|
type: { type: String },
|
|
13
13
|
message: { type: String },
|
|
14
14
|
count: { type: Number, default: 1 },
|
|
15
|
+
context: { type: String, nullable: true },
|
|
16
|
+
trace: { type: String, nullable: true },
|
|
15
17
|
createdAt: { type: Date },
|
|
16
18
|
updatedAt: { type: Date },
|
|
17
19
|
},
|
package/src/log.interceptor.ts
CHANGED
|
@@ -1,17 +1,14 @@
|
|
|
1
|
-
import type {
|
|
2
|
-
CallHandler,
|
|
3
|
-
ExecutionContext,
|
|
4
|
-
NestInterceptor,
|
|
5
|
-
} from "@nestjs/common";
|
|
1
|
+
import type { CallHandler, NestInterceptor } from "@nestjs/common";
|
|
6
2
|
import { Inject, Injectable } from "@nestjs/common";
|
|
7
3
|
import { Observable, tap } from "rxjs";
|
|
8
4
|
import { LogService } from "./services/log.service";
|
|
5
|
+
import { ExecutionContextHost } from "@nestjs/core/helpers/execution-context-host";
|
|
9
6
|
|
|
10
7
|
@Injectable()
|
|
11
8
|
export class LogInterceptor implements NestInterceptor {
|
|
12
9
|
constructor(@Inject(LogService) private readonly logService: LogService) {}
|
|
13
10
|
|
|
14
|
-
intercept(context:
|
|
11
|
+
intercept(context: ExecutionContextHost, next: CallHandler): Observable<any> {
|
|
15
12
|
return next.handle().pipe(
|
|
16
13
|
tap({
|
|
17
14
|
error: (error) => {
|
|
@@ -1,12 +1,7 @@
|
|
|
1
|
-
import {
|
|
2
|
-
ExecutionContext,
|
|
3
|
-
Injectable,
|
|
4
|
-
LoggerService,
|
|
5
|
-
Scope,
|
|
6
|
-
} from "@nestjs/common";
|
|
1
|
+
import { Injectable, LoggerService, Scope } from "@nestjs/common";
|
|
7
2
|
import { MemoryDbService } from "./memory-db.service";
|
|
8
3
|
import { defaultTable } from "../defaults";
|
|
9
|
-
import { LogModuleOptions, LogType } from "../types";
|
|
4
|
+
import { Context, LogModuleOptions, LogType } from "../types";
|
|
10
5
|
import {
|
|
11
6
|
DataSource,
|
|
12
7
|
DataSourceOptions,
|
|
@@ -14,6 +9,7 @@ import {
|
|
|
14
9
|
EntitySchema,
|
|
15
10
|
} from "typeorm";
|
|
16
11
|
import { createLogEntity } from "../entities/log.entity";
|
|
12
|
+
import { ExecutionContextHost } from "@nestjs/core/helpers/execution-context-host";
|
|
17
13
|
|
|
18
14
|
@Injectable({ scope: Scope.TRANSIENT })
|
|
19
15
|
export class LogService implements LoggerService {
|
|
@@ -42,7 +38,7 @@ export class LogService implements LoggerService {
|
|
|
42
38
|
return LogService.connection;
|
|
43
39
|
}
|
|
44
40
|
|
|
45
|
-
log(message: string, context?:
|
|
41
|
+
log(message: string, context?: ExecutionContextHost) {
|
|
46
42
|
this.smartInsert({
|
|
47
43
|
type: LogType.LOG,
|
|
48
44
|
message,
|
|
@@ -50,7 +46,7 @@ export class LogService implements LoggerService {
|
|
|
50
46
|
});
|
|
51
47
|
}
|
|
52
48
|
|
|
53
|
-
error(message: string, trace?: string, context?:
|
|
49
|
+
error(message: string, trace?: string, context?: ExecutionContextHost) {
|
|
54
50
|
this.smartInsert({
|
|
55
51
|
type: LogType.ERROR,
|
|
56
52
|
message,
|
|
@@ -59,7 +55,7 @@ export class LogService implements LoggerService {
|
|
|
59
55
|
});
|
|
60
56
|
}
|
|
61
57
|
|
|
62
|
-
warn(message: string, context?:
|
|
58
|
+
warn(message: string, context?: ExecutionContextHost) {
|
|
63
59
|
this.smartInsert({
|
|
64
60
|
type: LogType.WARN,
|
|
65
61
|
message,
|
|
@@ -67,7 +63,7 @@ export class LogService implements LoggerService {
|
|
|
67
63
|
});
|
|
68
64
|
}
|
|
69
65
|
|
|
70
|
-
debug(message: string, context?:
|
|
66
|
+
debug(message: string, context?: ExecutionContextHost) {
|
|
71
67
|
this.smartInsert({
|
|
72
68
|
type: LogType.DEBUG,
|
|
73
69
|
message,
|
|
@@ -75,7 +71,7 @@ export class LogService implements LoggerService {
|
|
|
75
71
|
});
|
|
76
72
|
}
|
|
77
73
|
|
|
78
|
-
verbose(message: string, context?:
|
|
74
|
+
verbose(message: string, context?: ExecutionContextHost) {
|
|
79
75
|
this.smartInsert({
|
|
80
76
|
type: LogType.VERBOSE,
|
|
81
77
|
message,
|
|
@@ -84,10 +80,17 @@ export class LogService implements LoggerService {
|
|
|
84
80
|
}
|
|
85
81
|
|
|
86
82
|
async getAll(): Promise<any[]> {
|
|
87
|
-
return this.getConnection().find(LogService.Log
|
|
83
|
+
return this.getConnection().find(LogService.Log, {
|
|
84
|
+
select: ["type", "message", "count", "createdAt", "updatedAt"],
|
|
85
|
+
});
|
|
88
86
|
}
|
|
89
87
|
|
|
90
|
-
private async smartInsert(data:
|
|
88
|
+
private async smartInsert(data: {
|
|
89
|
+
type: LogType;
|
|
90
|
+
message: string;
|
|
91
|
+
context?: ExecutionContextHost;
|
|
92
|
+
trace?: any;
|
|
93
|
+
}): Promise<any> {
|
|
91
94
|
const currentDate = new Date();
|
|
92
95
|
|
|
93
96
|
const connection = this.getConnection();
|
|
@@ -100,8 +103,12 @@ export class LogService implements LoggerService {
|
|
|
100
103
|
},
|
|
101
104
|
});
|
|
102
105
|
|
|
106
|
+
const context = data.context ? this.parseContext(data.context) : undefined;
|
|
107
|
+
|
|
103
108
|
if (log) {
|
|
104
109
|
return await connection.update(LogService.Log, log._id, {
|
|
110
|
+
context,
|
|
111
|
+
trace: data.trace,
|
|
105
112
|
count: log.count + 1,
|
|
106
113
|
updatedAt: currentDate,
|
|
107
114
|
});
|
|
@@ -110,6 +117,8 @@ export class LogService implements LoggerService {
|
|
|
110
117
|
return await connection.insert(LogService.Log, {
|
|
111
118
|
type: data.type,
|
|
112
119
|
message: data.message,
|
|
120
|
+
context,
|
|
121
|
+
trace: data.trace,
|
|
113
122
|
count: 1,
|
|
114
123
|
createdAt: currentDate,
|
|
115
124
|
updatedAt: currentDate,
|
|
@@ -119,4 +128,33 @@ export class LogService implements LoggerService {
|
|
|
119
128
|
private getConnection(): EntityManager {
|
|
120
129
|
return LogService.connection.manager || this.memoryDbService;
|
|
121
130
|
}
|
|
131
|
+
|
|
132
|
+
private parseContext(context: ExecutionContextHost): Partial<Context> {
|
|
133
|
+
const res: Partial<Context> = {};
|
|
134
|
+
const args = context.getArgs();
|
|
135
|
+
|
|
136
|
+
for (const arg of args) {
|
|
137
|
+
if (arg.rawHeaders) {
|
|
138
|
+
res.rawHeaders = arg.rawHeaders;
|
|
139
|
+
}
|
|
140
|
+
|
|
141
|
+
if (arg.url) {
|
|
142
|
+
res.url = arg.url;
|
|
143
|
+
}
|
|
144
|
+
|
|
145
|
+
if (arg.method) {
|
|
146
|
+
res.method = arg.method;
|
|
147
|
+
}
|
|
148
|
+
|
|
149
|
+
if (arg.params) {
|
|
150
|
+
res.params = arg.params;
|
|
151
|
+
}
|
|
152
|
+
|
|
153
|
+
if (arg.body) {
|
|
154
|
+
res.body = arg.body;
|
|
155
|
+
}
|
|
156
|
+
}
|
|
157
|
+
|
|
158
|
+
return res;
|
|
159
|
+
}
|
|
122
160
|
}
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
import { Injectable } from "@nestjs/common";
|
|
3
3
|
import { createHash, randomBytes } from "crypto";
|
|
4
4
|
import { defaultTable } from "../defaults";
|
|
5
|
-
import { EntitySchema } from "typeorm";
|
|
5
|
+
import { EntitySchema, FindManyOptions } from "typeorm";
|
|
6
6
|
|
|
7
7
|
const tables = [defaultTable];
|
|
8
8
|
|
|
@@ -59,18 +59,29 @@ export class MemoryDbService {
|
|
|
59
59
|
return Promise.reject();
|
|
60
60
|
}
|
|
61
61
|
|
|
62
|
-
public async find(
|
|
62
|
+
public async find(
|
|
63
|
+
entity: EntitySchema,
|
|
64
|
+
options?: {
|
|
65
|
+
select?: string[];
|
|
66
|
+
}
|
|
67
|
+
): Promise<any[]> {
|
|
63
68
|
const table = this.getTableName(entity);
|
|
64
69
|
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
70
|
+
let mapOptions = (obj: any) => obj;
|
|
71
|
+
|
|
72
|
+
if (options?.select) {
|
|
73
|
+
mapOptions = (obj: any) => {
|
|
74
|
+
const newObj: any = {};
|
|
75
|
+
|
|
76
|
+
for (const key of options.select || []) {
|
|
77
|
+
newObj[key] = obj[key];
|
|
78
|
+
}
|
|
79
|
+
|
|
80
|
+
return newObj;
|
|
81
|
+
};
|
|
82
|
+
}
|
|
83
|
+
|
|
84
|
+
return Promise.resolve(this.db[table].map(mapOptions));
|
|
74
85
|
}
|
|
75
86
|
|
|
76
87
|
public async getOneById(entity: EntitySchema, _id: string): Promise<any> {
|
package/src/types/index.ts
CHANGED