@viplance/nestjs-logger 0.2.0 → 0.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -5,7 +5,7 @@
5
5
  [![GitHub stars](https://img.shields.io/github/stars/viplance/nestjs-logger.svg?style=social)](https://github.com/viplance/nestjs-logger)
6
6
 
7
7
  ### Installation
8
- 1. Install the package npm i @viplance/nestjs-logger<br />
8
+ 1. Install the package `npm i @viplance/nestjs-logger`<br />
9
9
  2. Import the module in app.module.ts<br />
10
10
  ```typescript
11
11
  import { LogModule } from '@viplance/nestjs-logger';
@@ -17,24 +17,23 @@
17
17
  ]
18
18
  })
19
19
  ```
20
- <br />
21
- 3. Connect the module in main.ts<br />
20
+
21
+ 3. Init the module (typically in main.ts)<br />
22
22
 
23
23
  ```typescript
24
24
  import { LogModule } from '@viplance/nestjs-logger';
25
25
 
26
- await LogModule.connect(app, {
26
+ await LogModule.init(app, {
27
27
  path: '/logs', // define the public URL for the log list
28
- key: 'kjhj#$kj3lqq1', // use the key to protect data from unauthorized access
28
+ key: 'kjhjmi321lqq7a', // use the key to protect data from unauthorized access
29
29
  });
30
30
  ```
31
31
 
32
-
33
- Use the database to store logs.
32
+ Connect the database to store logs.
34
33
 
35
34
  ```typescript
36
- await LogModule.connect(app, {
37
- path: '/logs',
35
+ await LogModule.init(app, {
36
+ ...,
38
37
  database: {
39
38
  type: 'mongodb',
40
39
  host: 'localhost',
@@ -44,19 +43,24 @@ Use the database to store logs.
44
43
  });
45
44
  ```
46
45
 
47
- <br />
46
+ 4. Use the `LogService` in case of custom logs to debug the application.<br />
47
+ ```typescript
48
+ import { LogService } from '@viplance/nestjs-logger';
49
+
50
+ constructor(private logService: LogService) {}
51
+
52
+ this.logService.log('Some log information');
53
+ ```
54
+
48
55
 
49
56
  ### Additional information
50
57
 
51
- `path`, `key` and `database` options are optional
52
- <br />
53
- Use the LogService in case of custom logs to debug the application.
54
- <br />
55
- The logs could be available at `your_application_url`/`path`?key=`key>`
56
- <br />
57
- By default the logs will be stored in memory and deleted when the application stops.<br />
58
- <br />
59
- Available service methods:
58
+ - `path`, `key` and `database` properties are optional.
59
+ - The logs could be available at `your_application_url`/`path`?key=`key`
60
+ - The log API could be available at `your_application_url`/`path`/api?key=`key`
61
+ -By default the logs will be stored in memory and deleted when the application stops.<br />
62
+
63
+ ### The LogService methods:
60
64
  - log()
61
65
  - error()
62
66
  - warn()
@@ -1,4 +1,4 @@
1
1
  import { LogModuleOptions } from "./types";
2
2
  export declare class LogModule {
3
- static connect(app: any, options?: LogModuleOptions): Promise<void>;
3
+ static init(app: any, options?: LogModuleOptions): Promise<void>;
4
4
  }
@@ -16,14 +16,19 @@ const memory_db_service_1 = require("./services/memory-db.service");
16
16
  const log_interceptor_1 = require("./log.interceptor");
17
17
  const typeorm_1 = require("@nestjs/typeorm");
18
18
  const node_querystring_1 = __importDefault(require("node:querystring"));
19
+ const core_1 = require("@nestjs/core");
20
+ const node_path_1 = require("node:path");
19
21
  let LogModule = class LogModule {
20
- static async connect(app, options) {
22
+ static async init(app, options) {
21
23
  app.resolve(log_service_1.LogService);
22
24
  const logService = await app.resolve(log_service_1.LogService);
23
25
  app.useGlobalInterceptors(new log_interceptor_1.LogInterceptor(logService)); // intercept all errors
24
26
  if (options === null || options === void 0 ? void 0 : options.path) {
27
+ app.useStaticAssets((0, node_path_1.join)(__dirname, "..", "public"), {
28
+ prefix: options.path,
29
+ });
25
30
  const httpAdapter = app.getHttpAdapter();
26
- httpAdapter.get(options.path, async (req, res) => {
31
+ httpAdapter.get((0, node_path_1.join)(options.path, "api"), async (req, res) => {
27
32
  var _a;
28
33
  if ((_a = log_service_1.LogService.options) === null || _a === void 0 ? void 0 : _a.key) {
29
34
  const params = node_querystring_1.default.parse(req.url.split("?")[1]);
@@ -34,7 +39,7 @@ let LogModule = class LogModule {
34
39
  res.json(await logService.getAll());
35
40
  });
36
41
  }
37
- if (options) {
42
+ if (options === null || options === void 0 ? void 0 : options.database) {
38
43
  await logService.connectDb(options);
39
44
  }
40
45
  }
@@ -44,7 +49,7 @@ exports.LogModule = LogModule = __decorate([
44
49
  (0, common_1.Global)(),
45
50
  (0, common_1.Module)({
46
51
  imports: [typeorm_1.TypeOrmModule],
47
- providers: [log_service_1.LogService, memory_db_service_1.MemoryDbService],
52
+ providers: [core_1.ApplicationConfig, log_service_1.LogService, memory_db_service_1.MemoryDbService],
48
53
  exports: [typeorm_1.TypeOrmModule, log_service_1.LogService, memory_db_service_1.MemoryDbService],
49
54
  })
50
55
  ], LogModule);
@@ -1 +1 @@
1
- {"version":3,"file":"log.module.js","sourceRoot":"","sources":["../src/log.module.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,2CAA+D;AAC/D,wDAAoD;AACpD,oEAA+D;AAC/D,uDAAmD;AAEnD,6CAAgD;AAChD,wEAA2C;AAQpC,IAAM,SAAS,GAAf,MAAM,SAAS;IACb,MAAM,CAAC,KAAK,CAAC,OAAO,CACzB,GAAQ,EACR,OAA0B;QAE1B,GAAG,CAAC,OAAO,CAAC,wBAAU,CAAC,CAAC;QAExB,MAAM,UAAU,GAAe,MAAM,GAAG,CAAC,OAAO,CAAC,wBAAU,CAAC,CAAC;QAE7D,GAAG,CAAC,qBAAqB,CAAC,IAAI,gCAAc,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,uBAAuB;QAElF,IAAI,OAAO,aAAP,OAAO,uBAAP,OAAO,CAAE,IAAI,EAAE,CAAC;YAClB,MAAM,WAAW,GAAG,GAAG,CAAC,cAAc,EAAE,CAAC;YACzC,WAAW,CAAC,GAAG,CAAC,OAAO,CAAC,IAAI,EAAE,KAAK,EAAE,GAAQ,EAAE,GAAQ,EAAE,EAAE;;gBACzD,IAAI,MAAA,wBAAU,CAAC,OAAO,0CAAE,GAAG,EAAE,CAAC;oBAC5B,MAAM,MAAM,GAAG,0BAAW,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;oBAExD,IAAI,MAAM,CAAC,GAAG,IAAI,MAAM,CAAC,GAAG,KAAK,wBAAU,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC;wBACxD,MAAM,IAAI,sBAAa,CAAC,cAAc,EAAE,GAAG,CAAC,CAAC;oBAC/C,CAAC;gBACH,CAAC;gBAED,GAAG,CAAC,IAAI,CAAC,MAAM,UAAU,CAAC,MAAM,EAAE,CAAC,CAAC;YACtC,CAAC,CAAC,CAAC;QACL,CAAC;QAED,IAAI,OAAO,EAAE,CAAC;YACZ,MAAM,UAAU,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC;QACtC,CAAC;IACH,CAAC;CACF,CAAA;AA9BY,8BAAS;oBAAT,SAAS;IANrB,IAAA,eAAM,GAAE;IACR,IAAA,eAAM,EAAC;QACN,OAAO,EAAE,CAAC,uBAAa,CAAC;QACxB,SAAS,EAAE,CAAC,wBAAU,EAAE,mCAAe,CAAC;QACxC,OAAO,EAAE,CAAC,uBAAa,EAAE,wBAAU,EAAE,mCAAe,CAAC;KACtD,CAAC;GACW,SAAS,CA8BrB"}
1
+ {"version":3,"file":"log.module.js","sourceRoot":"","sources":["../src/log.module.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,2CAA+D;AAC/D,wDAAoD;AACpD,oEAA+D;AAC/D,uDAAmD;AAEnD,6CAAgD;AAChD,wEAA2C;AAC3C,uCAAiD;AACjD,yCAAiC;AAQ1B,IAAM,SAAS,GAAf,MAAM,SAAS;IACb,MAAM,CAAC,KAAK,CAAC,IAAI,CACtB,GAAQ,EACR,OAA0B;QAE1B,GAAG,CAAC,OAAO,CAAC,wBAAU,CAAC,CAAC;QAExB,MAAM,UAAU,GAAe,MAAM,GAAG,CAAC,OAAO,CAAC,wBAAU,CAAC,CAAC;QAE7D,GAAG,CAAC,qBAAqB,CAAC,IAAI,gCAAc,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,uBAAuB;QAElF,IAAI,OAAO,aAAP,OAAO,uBAAP,OAAO,CAAE,IAAI,EAAE,CAAC;YAClB,GAAG,CAAC,eAAe,CAAC,IAAA,gBAAI,EAAC,SAAS,EAAE,IAAI,EAAE,QAAQ,CAAC,EAAE;gBACnD,MAAM,EAAE,OAAO,CAAC,IAAI;aACrB,CAAC,CAAC;YAEH,MAAM,WAAW,GAAG,GAAG,CAAC,cAAc,EAAE,CAAC;YACzC,WAAW,CAAC,GAAG,CAAC,IAAA,gBAAI,EAAC,OAAO,CAAC,IAAI,EAAE,KAAK,CAAC,EAAE,KAAK,EAAE,GAAQ,EAAE,GAAQ,EAAE,EAAE;;gBACtE,IAAI,MAAA,wBAAU,CAAC,OAAO,0CAAE,GAAG,EAAE,CAAC;oBAC5B,MAAM,MAAM,GAAG,0BAAW,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;oBAExD,IAAI,MAAM,CAAC,GAAG,IAAI,MAAM,CAAC,GAAG,KAAK,wBAAU,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC;wBACxD,MAAM,IAAI,sBAAa,CAAC,cAAc,EAAE,GAAG,CAAC,CAAC;oBAC/C,CAAC;gBACH,CAAC;gBAED,GAAG,CAAC,IAAI,CAAC,MAAM,UAAU,CAAC,MAAM,EAAE,CAAC,CAAC;YACtC,CAAC,CAAC,CAAC;QACL,CAAC;QAED,IAAI,OAAO,aAAP,OAAO,uBAAP,OAAO,CAAE,QAAQ,EAAE,CAAC;YACtB,MAAM,UAAU,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC;QACtC,CAAC;IACH,CAAC;CACF,CAAA;AAlCY,8BAAS;oBAAT,SAAS;IANrB,IAAA,eAAM,GAAE;IACR,IAAA,eAAM,EAAC;QACN,OAAO,EAAE,CAAC,uBAAa,CAAC;QACxB,SAAS,EAAE,CAAC,wBAAiB,EAAE,wBAAU,EAAE,mCAAe,CAAC;QAC3D,OAAO,EAAE,CAAC,uBAAa,EAAE,wBAAU,EAAE,mCAAe,CAAC;KACtD,CAAC;GACW,SAAS,CAkCrB"}
@@ -88,6 +88,7 @@ let LogService = LogService_1 = class LogService {
88
88
  "context",
89
89
  "trace",
90
90
  ],
91
+ order: { updatedAt: "DESC" },
91
92
  });
92
93
  }
93
94
  async smartInsert(data) {
@@ -120,7 +121,8 @@ let LogService = LogService_1 = class LogService {
120
121
  });
121
122
  }
122
123
  getConnection() {
123
- return LogService_1.connection.manager || this.memoryDbService;
124
+ var _a;
125
+ return ((_a = LogService_1.connection) === null || _a === void 0 ? void 0 : _a.manager) || this.memoryDbService;
124
126
  }
125
127
  parseContext(context) {
126
128
  const res = {};
@@ -1 +1 @@
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;AAEzD,mCAAqC;AAG9B,IAAM,UAAU,kBAAhB,MAAM,UAAU;IAMrB,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,YAAU,CAAC,OAAO,GAAG,OAAO,CAAC;QAE7B,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,IAAI,YAAU,CAAC,KAAK,EAAE,CAAC;YACrB,aAAa,CAAC,YAAU,CAAC,KAAK,CAAC,CAAC;QAClC,CAAC;QAED,YAAU,CAAC,KAAK,GAAG,IAAA,oBAAW,EAAC,IAAI,CAAC,YAAY,EAAE,IAAI,GAAG,EAAE,GAAG,EAAE,CAAC,CAAC,CAAC,0BAA0B;QAE7F,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;gBACN,MAAM;gBACN,SAAS;gBACT,OAAO;gBACP,WAAW;gBACX,WAAW;gBACX,SAAS;gBACT,OAAO;aACR;SACF,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;IAEO,KAAK,CAAC,YAAY;;QACxB,IAAI,MAAA,YAAU,CAAC,OAAO,0CAAE,OAAO,EAAE,CAAC;YAChC,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,aAAa,EAAE,CAAC,IAAI,CAAC,YAAU,CAAC,GAAG,EAAE;gBAC7D,KAAK,EAAE,EAAE,SAAS,EAAE,MAAM,EAAE;gBAC5B,IAAI,EAAE,MAAA,YAAU,CAAC,OAAO,0CAAE,OAAO;gBACjC,MAAM,EAAE,CAAC,KAAK,CAAC;aAChB,CAAC,CAAC;YAEH,MAAM,SAAS,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;YAEhD,MAAM,YAAU,CAAC,UAAU;iBACxB,aAAa,CAAC,YAAU,CAAC,GAAG,CAAC;iBAC7B,kBAAkB,EAAE;iBACpB,MAAM,EAAE;iBACR,IAAI,CAAC,YAAU,CAAC,GAAG,CAAC;iBACpB,KAAK,CAAC,sBAAsB,EAAE,EAAE,GAAG,EAAE,SAAS,EAAE,CAAC;iBACjD,OAAO,EAAE,CAAC;QACf,CAAC;IACH,CAAC;;AAtLU,gCAAU;AAGd,cAAG,GAAiB,IAAA,4BAAe,EAAC,uBAAY,CAAC,AAA9C,CAA+C;qBAH9C,UAAU;IADtB,IAAA,mBAAU,EAAC,EAAE,KAAK,EAAE,cAAK,CAAC,SAAS,EAAE,CAAC;qCAOS,mCAAe;GANlD,UAAU,CAuLtB"}
1
+ {"version":3,"file":"log.service.js","sourceRoot":"","sources":["../../src/services/log.service.ts"],"names":[],"mappings":"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"}
@@ -64,7 +64,7 @@ let MemoryDbService = class MemoryDbService {
64
64
  return newObj;
65
65
  };
66
66
  }
67
- return Promise.resolve(this.db[table].map(mapOptions));
67
+ return Promise.resolve(this.db[table].map(mapOptions).sort((a, b) => b.updatedAt - a.updatedAt));
68
68
  }
69
69
  async getOneById(entity, _id) {
70
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":"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"}
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;QA6IlC,iBAAY,GAAG,CAAC,MAAoB,EAAE,EAAE,CAAC,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC;QA1InE,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;YAC3B,IAAI,CAAC,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC;QACtB,CAAC;IACH,CAAC;IAEM,MAAM,CAAC,MAAoB,EAAE,IAAS;QAC3C,MAAM,KAAK,GAAG,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC;QAExC,0BAA0B;QAC1B,MAAM,UAAU,GAAG,IAAA,oBAAW,EAAC,EAAE,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;QACnD,MAAM,GAAG,GAAG,IAAA,mBAAU,EAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QAElE,IAAI,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC;YAClB,GAAG,IAAI;YACP,GAAG,EAAE,eAAe;SACrB,CAAC,CAAC;QAEH,OAAO,GAAG,CAAC;IACb,CAAC;IAEM,KAAK,CAAC,MAAM,CACjB,MAAoB,EACpB,SAAc,EACd,IAAS;QAET,MAAM,KAAK,GAAG,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC;QACxC,IAAI,KAAK,GAAkB,IAAI,CAAC;QAEhC,IAAI,OAAO,SAAS,KAAK,QAAQ,EAAE,CAAC;YAClC,KAAK,GAAG,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,EAAE,KAAK,EAAE,EAAE,GAAG,EAAE,SAAS,EAAE,EAAE,CAAC,CAAC;QAChE,CAAC;QAED,IAAI,SAAS,aAAT,SAAS,uBAAT,SAAS,CAAE,KAAK,EAAE,CAAC;YACrB,KAAK,GAAG,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC;QAC5C,CAAC;QAED,IAAI,KAAK,KAAK,IAAI,EAAE,CAAC;YACnB,IAAI,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,GAAG;gBACtB,GAAG,IAAI,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC;gBACxB,GAAG,IAAI;aACR,CAAC;YAEF,OAAO,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC;QACpD,CAAC;QAED,OAAO,OAAO,CAAC,MAAM,EAAE,CAAC;IAC1B,CAAC;IAEM,KAAK,CAAC,IAAI,CACf,MAAoB,EACpB,OAEC;QAED,MAAM,KAAK,GAAG,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC;QAExC,IAAI,UAAU,GAAG,CAAC,GAAQ,EAAE,EAAE,CAAC,GAAG,CAAC;QAEnC,IAAI,OAAO,aAAP,OAAO,uBAAP,OAAO,CAAE,MAAM,EAAE,CAAC;YACpB,UAAU,GAAG,CAAC,GAAQ,EAAE,EAAE;gBACxB,MAAM,MAAM,GAAQ,EAAE,CAAC;gBAEvB,KAAK,MAAM,GAAG,IAAI,OAAO,CAAC,MAAM,IAAI,EAAE,EAAE,CAAC;oBACvC,MAAM,CAAC,GAAG,CAAC,GAAG,GAAG,CAAC,GAAG,CAAC,CAAC;gBACzB,CAAC;gBAED,OAAO,MAAM,CAAC;YAChB,CAAC,CAAC;QACJ,CAAC;QAED,OAAO,OAAO,CAAC,OAAO,CACpB,IAAI,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,SAAS,GAAG,CAAC,CAAC,SAAS,CAAC,CACzE,CAAC;IACJ,CAAC;IAEM,KAAK,CAAC,UAAU,CAAC,MAAoB,EAAE,GAAW;QACvD,MAAM,KAAK,GAAG,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC;QAExC,OAAO,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,GAAG,KAAK,GAAG,CAAC,CAAC,CAAC;IAC1E,CAAC;IAEM,cAAc,CACnB,MAAoB,EACpB,KAAa,EACb,KAAa;QAEb,MAAM,KAAK,GAAG,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC;QAExC,OAAO,IAAI,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,KAAK,CAAC,CAAC;IAChE,CAAC;IAEM,OAAO,CACZ,MAAoB,EACpB,SAAyB;QAEzB,MAAM,KAAK,GAAG,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC;QAExC,OAAO,OAAO,CAAC,OAAO,CACpB,IAAI,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,YAAY,CAAC,SAAS,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC,CACxE,CAAC;IACJ,CAAC;IAEO,SAAS,CAAC,MAAoB,EAAE,SAAyB;QAC/D,MAAM,KAAK,GAAG,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC;QAExC,OAAO,IAAI,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,SAAS,CAAC,CAAC,IAAI,EAAE,EAAE,CACvC,IAAI,CAAC,YAAY,CAAC,SAAS,CAAC,KAAK,EAAE,IAAI,CAAC,CACzC,CAAC;IACJ,CAAC;IAEO,YAAY,CAAC,IAAS,EAAE,IAAS;QACvC,gCAAgC;QAChC,IAAI,IAAI,KAAK,IAAI;YAAE,OAAO,IAAI,CAAC;QAE/B,mCAAmC;QACnC,IACE,IAAI,IAAI,IAAI;YACZ,IAAI,IAAI,IAAI;YACZ,OAAO,IAAI,KAAK,QAAQ;YACxB,OAAO,IAAI,KAAK,QAAQ,EACxB,CAAC;YACD,OAAO,KAAK,CAAC;QACf,CAAC;QAED,sBAAsB;QACtB,MAAM,KAAK,GAAG,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAChC,MAAM,KAAK,GAAG,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAEhC,6BAA6B;QAC7B,KAAK,MAAM,GAAG,IAAI,KAAK,EAAE,CAAC;YACxB,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,GAAG,CAAC;gBAAE,OAAO,KAAK,CAAC;YAEvC,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC;gBAAE,OAAO,KAAK,CAAC;QAC7D,CAAC;QAED,OAAO,IAAI,CAAC;IACd,CAAC;CAGF,CAAA;AA/IY,0CAAe;0BAAf,eAAe;IAD3B,IAAA,mBAAU,GAAE;;GACA,eAAe,CA+I3B"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@viplance/nestjs-logger",
3
- "version": "0.2.0",
3
+ "version": "0.3.0",
4
4
  "description": "NestJS internal logging system",
5
5
  "main": "dist/index.js",
6
6
  "types": "dist/index.d.ts",
Binary file
@@ -0,0 +1,42 @@
1
+ <!DOCTYPE html>
2
+ <html>
3
+ <head>
4
+ <meta charset="UTF-8" />
5
+ <meta name="viewport" content="width=device-width, initial-scale=1" />
6
+ <title>NestJS logging system</title>
7
+ <link rel="icon" type="image/x-icon" href="favicon.ico">
8
+ <link rel="stylesheet" href="styles/reset.css" />
9
+ <link rel="stylesheet" href="styles/colors.css" />
10
+ <link rel="stylesheet" href="styles/index.css" />
11
+ <script
12
+ defer="defer"
13
+ src="scripts/common.js
14
+ "
15
+ ></script>
16
+ </head>
17
+ <body>
18
+ <header>
19
+ <div class="content container">
20
+ <div class="logo">
21
+ <img src="favicon.ico" alt="Logger" />
22
+ <h2>NestJS logging system</h2>
23
+ </div>
24
+ <nav>
25
+ <ul>
26
+ <li class="all active" data-selector="all">All</a></li>
27
+ <li class="log" data-selector="log">Log</a></li>
28
+ <li class="error" data-selector="error">Error</li>
29
+ <li class="warn" data-selector="warn">Warning</li>
30
+ <li class="debug" data-selector="debug">Debug</li>
31
+ <li class="verbose" data-selector="verbose">Verbose</li>
32
+ </ul>
33
+ </nav>
34
+ <div onclick="getLogs()"><button class="white">Refresh</button></div>
35
+ </div>
36
+ </header>
37
+
38
+ <div class="container mt-3">
39
+ <section id="logs"></section>
40
+ </div>
41
+ </body>
42
+ </html>
@@ -0,0 +1,147 @@
1
+ const selectedLogTypes = {
2
+ all: true,
3
+ log: false,
4
+ error: false,
5
+ warn: false,
6
+ debug: false,
7
+ verbose: false,
8
+ };
9
+
10
+ const logTypes = Object.keys(selectedLogTypes).filter((key) => key !== `all`);
11
+
12
+ window.addEventListener("load", async () => {
13
+ getLogs();
14
+ });
15
+
16
+ document.addEventListener(`click`, (e) => {
17
+ const target = e.target;
18
+ const origin = target.closest(`li`);
19
+
20
+ if (origin) {
21
+ const selector = target.dataset.selector;
22
+
23
+ if (selector === `all`) {
24
+ if (selectedLogTypes[`all`]) {
25
+ reactivateAllTypeSelectors();
26
+
27
+ selectedLogTypes[`all`] = false;
28
+ unsetSelectorActive(target);
29
+ } else {
30
+ selectedLogTypes[`all`] = true;
31
+ setSelectorActive(target);
32
+
33
+ logTypes.forEach((type) => {
34
+ unsetSelectorActive(document.querySelector(`li.${type}`));
35
+ });
36
+ }
37
+
38
+ getLogs();
39
+
40
+ return;
41
+ }
42
+
43
+ if (selectedLogTypes[selector]) {
44
+ unsetSelectorActive(target);
45
+ selectedLogTypes[selector] = false;
46
+ } else {
47
+ setSelectorActive(target);
48
+ selectedLogTypes[selector] = true;
49
+ reactivateAllTypeSelectors();
50
+ }
51
+
52
+ selectedLogTypes[`all`] = false;
53
+ unsetSelectorActive(document.querySelector(`li.all`));
54
+
55
+ getLogs();
56
+ }
57
+ });
58
+
59
+ function reactivateAllTypeSelectors() {
60
+ logTypes.forEach((type) => {
61
+ const li = document.querySelector(`li.${type}`);
62
+
63
+ if (selectedLogTypes[type]) {
64
+ setSelectorActive(li);
65
+ } else {
66
+ unsetSelectorActive(li);
67
+ }
68
+ });
69
+ }
70
+
71
+ function setSelectorActive(target) {
72
+ const width = target.offsetWidth;
73
+ target.classList.add(`active`);
74
+ target.style.width = `${width}px`;
75
+ }
76
+
77
+ function unsetSelectorActive(target) {
78
+ target.classList.remove(`active`);
79
+ }
80
+
81
+ function getDate(incomingDate) {
82
+ const date = new Date(incomingDate);
83
+
84
+ const formatter = new Intl.DateTimeFormat(undefined, {
85
+ hour: "2-digit",
86
+ minute: "2-digit",
87
+ second: "2-digit",
88
+ month: "short",
89
+ day: "2-digit",
90
+ year: "numeric",
91
+ hour12: false,
92
+ });
93
+
94
+ const parts = formatter.formatToParts(date);
95
+ const obj = Object.fromEntries(parts.map((p) => [p.type, p.value]));
96
+ const formatted = `${obj.hour}:${obj.minute}:${obj.second}, ${obj.month} ${obj.day} ${obj.year}`;
97
+
98
+ return formatted;
99
+ }
100
+
101
+ function getTypeClass(type) {
102
+ return type;
103
+ }
104
+
105
+ function getContext(context) {
106
+ if (typeof context === `object`) {
107
+ return JSON.stringify(context);
108
+ }
109
+
110
+ return context || "";
111
+ }
112
+
113
+ function getLogHtmlElement(log) {
114
+ return `<div id="${log._id}" class="row">
115
+ <div class="col ${getTypeClass(log.type)}">${log.type}</div>
116
+ <div class="col">
117
+ <div>${log.message}</div>
118
+ <div class="date">${getDate(log.updatedAt)}</div>
119
+ </div>
120
+ <div class="col context">${log.trace || ""}</div>
121
+ <div class="col">${log.count}</div>
122
+ </div>`;
123
+ }
124
+
125
+ async function getLogs() {
126
+ const { origin, pathname, search } = window.location;
127
+ const res = await fetch(`${origin}${pathname}api${search}`);
128
+
129
+ if (res.ok) {
130
+ const logs = (await res.json()).filter((log) => {
131
+ return selectedLogTypes["all"] || selectedLogTypes[log.type];
132
+ });
133
+
134
+ let html = `<div class="header">
135
+ <div class="col">Type</div>
136
+ <div class="col">Info</div>
137
+ <div class="col">Trace</div>
138
+ <div class="col">Count</div>
139
+ </div>`;
140
+
141
+ logs.forEach((log) => {
142
+ html += getLogHtmlElement(log);
143
+ });
144
+
145
+ document.getElementById("logs").innerHTML = html;
146
+ }
147
+ }
@@ -0,0 +1,12 @@
1
+ :root {
2
+ --teal: #128c7e;
3
+ --dark: #666;
4
+ --light: #eee;
5
+ --blue: #34b7f1;
6
+ --white: #fff;
7
+ --log: var(--blue);
8
+ --error: red;
9
+ --warn: orange;
10
+ --debug: green;
11
+ --verbose: gray;
12
+ }
@@ -0,0 +1,241 @@
1
+ /* general */
2
+ body {
3
+ background-color: var(--white);
4
+ color: black;
5
+ font-family: Verdana, sans-serif;
6
+ display: flex;
7
+ flex-direction: column;
8
+ align-items: center;
9
+ justify-items: center;
10
+ position: relative;
11
+ }
12
+
13
+ body:nth-child(2) {
14
+ margin-top: 4rem;
15
+ }
16
+
17
+ h1 {
18
+ font-size: 2.5rem;
19
+ font-weight: 400;
20
+ line-height: 3rem;
21
+ }
22
+
23
+ h2 {
24
+ font-size: 1.7rem;
25
+ font-weight: 400;
26
+ line-height: 2.5rem;
27
+ }
28
+
29
+ .highlight {
30
+ color: var(--teal);
31
+ }
32
+
33
+ .bold {
34
+ font-weight: 700;
35
+ }
36
+
37
+ .content {
38
+ display: flex;
39
+ justify-content: space-between;
40
+ align-items: center;
41
+ position: relative;
42
+ }
43
+
44
+ .container {
45
+ width: 100%;
46
+ max-width: 1600px;
47
+ }
48
+
49
+ @media screen and (width >= 1600px) {
50
+ .content {
51
+ min-width: 1600px;
52
+ }
53
+ }
54
+
55
+ .shadow {
56
+ box-shadow: 0.5rem 0.5rem 1.5rem 0.2rem #ddd;
57
+ }
58
+
59
+ button {
60
+ display: flex;
61
+ justify-content: space-between;
62
+ align-items: center;
63
+ gap: 0.5rem;
64
+ background-color: var(--teal);
65
+ border: none;
66
+ border-radius: 0.5rem;
67
+ color: var(--white);
68
+ padding: 15px 32px;
69
+ text-align: center;
70
+ text-decoration: none;
71
+ font-size: 1rem;
72
+ margin: 4px 2px;
73
+ cursor: pointer;
74
+ }
75
+
76
+ button img {
77
+ width: 2rem;
78
+ height: 2rem;
79
+ }
80
+
81
+ button:hover {
82
+ text-decoration: underline;
83
+ }
84
+
85
+ button.light {
86
+ background-color: var(--light);
87
+ border: 1px solid var(--dark);
88
+ color: black;
89
+ }
90
+
91
+ button.white {
92
+ background-color: var(--white);
93
+ border: 1px solid var(--teal);
94
+ color: var(--teal);
95
+ }
96
+
97
+ /* header */
98
+ header {
99
+ padding-top: 1rem;
100
+ box-sizing: border-box;
101
+ display: flex;
102
+ flex-direction: row;
103
+ justify-content: center;
104
+ position: fixed !important;
105
+ top: 0;
106
+ background: var(--white);
107
+ z-index: 1;
108
+ width: 100%;
109
+ }
110
+
111
+ header .logo {
112
+ display: flex;
113
+ align-items: center;
114
+ justify-items: left;
115
+ opacity: 0.8;
116
+ }
117
+
118
+ header .logo img {
119
+ height: 3rem;
120
+ width: 3rem;
121
+ margin-right: 1rem;
122
+ }
123
+
124
+ nav ul {
125
+ display: flex;
126
+ justify-content: space-evenly;
127
+ align-items: center;
128
+ list-style: none;
129
+ gap: 3rem;
130
+ }
131
+
132
+ nav ul li {
133
+ cursor: pointer;
134
+ opacity: 0.7;
135
+ text-rendering: geometricPrecision;
136
+ }
137
+
138
+ nav ul li.active {
139
+ font-weight: 600;
140
+ opacity: 1;
141
+ }
142
+
143
+ nav ul li:hover {
144
+ text-decoration: underline;
145
+ }
146
+
147
+ /* margins */
148
+ .mt-2 {
149
+ margin-top: 2rem;
150
+ }
151
+
152
+ .mt-3 {
153
+ margin-top: 3rem;
154
+ }
155
+
156
+ /* table */
157
+ .header,
158
+ .row {
159
+ display: flex;
160
+ gap: 1rem;
161
+ row-gap: 1rem;
162
+ align-items: center;
163
+ justify-content: space-around;
164
+ }
165
+
166
+ .header {
167
+ height: 2rem;
168
+ background-color: var(--dark);
169
+ color: var(--white);
170
+ }
171
+
172
+ .header .col,
173
+ .row > :last-child {
174
+ text-align: center;
175
+ }
176
+
177
+ .header > :first-child,
178
+ .row > :first-child {
179
+ flex: 0 0 5rem;
180
+ text-align: center;
181
+ }
182
+ .header > :nth-child(2),
183
+ .row > :nth-child(2) {
184
+ flex: 0 0 20rem;
185
+ }
186
+ .header > :nth-child(3),
187
+ .row > :nth-child(3) {
188
+ flex: 1 1 auto;
189
+ }
190
+ div.header > :last-child,
191
+ .row > :last-child {
192
+ flex: 0 0 5rem;
193
+ }
194
+
195
+ .row {
196
+ height: 3rem;
197
+ }
198
+
199
+ .row:nth-child(odd) {
200
+ background-color: var(--light);
201
+ }
202
+
203
+ .col {
204
+ padding: 1rem;
205
+ box-sizing: border-box;
206
+ }
207
+
208
+ .context {
209
+ font-size: small;
210
+ color: var(--dark);
211
+ display: -webkit-box;
212
+ -webkit-box-orient: vertical;
213
+ line-clamp: 2;
214
+ -webkit-line-clamp: 2;
215
+ overflow: hidden;
216
+ text-overflow: ellipsis;
217
+ max-height: 2.65rem;
218
+ margin-top: -1rem;
219
+ }
220
+
221
+ .date {
222
+ font-size: small;
223
+ color: var(--dark);
224
+ }
225
+
226
+ /* logs */
227
+ .log {
228
+ color: var(--log);
229
+ }
230
+ .error {
231
+ color: var(--error);
232
+ }
233
+ .warn {
234
+ color: var(--warn);
235
+ }
236
+ .debug {
237
+ color: var(--debug);
238
+ }
239
+ .verbose {
240
+ color: var(--verbose);
241
+ }
@@ -0,0 +1,131 @@
1
+ html,
2
+ body,
3
+ div,
4
+ span,
5
+ applet,
6
+ object,
7
+ iframe,
8
+ h1,
9
+ h2,
10
+ h3,
11
+ h4,
12
+ h5,
13
+ h6,
14
+ p,
15
+ blockquote,
16
+ pre,
17
+ a,
18
+ abbr,
19
+ acronym,
20
+ address,
21
+ big,
22
+ cite,
23
+ code,
24
+ del,
25
+ dfn,
26
+ em,
27
+ img,
28
+ ins,
29
+ kbd,
30
+ q,
31
+ s,
32
+ samp,
33
+ small,
34
+ strike,
35
+ strong,
36
+ sub,
37
+ sup,
38
+ tt,
39
+ var,
40
+ b,
41
+ u,
42
+ i,
43
+ center,
44
+ dl,
45
+ dt,
46
+ dd,
47
+ ol,
48
+ ul,
49
+ li,
50
+ fieldset,
51
+ form,
52
+ label,
53
+ legend,
54
+ table,
55
+ caption,
56
+ tbody,
57
+ tfoot,
58
+ thead,
59
+ tr,
60
+ th,
61
+ td,
62
+ article,
63
+ aside,
64
+ canvas,
65
+ details,
66
+ embed,
67
+ figure,
68
+ figcaption,
69
+ footer,
70
+ hgroup,
71
+ menu,
72
+ nav,
73
+ output,
74
+ ruby,
75
+ section,
76
+ summary,
77
+ time,
78
+ mark,
79
+ audio,
80
+ video {
81
+ margin: 0;
82
+ padding: 0;
83
+ border: 0;
84
+ font-size: 100%;
85
+ font: inherit;
86
+ vertical-align: baseline;
87
+ }
88
+ /* HTML5 display-role reset for older browsers */
89
+ article,
90
+ aside,
91
+ details,
92
+ figcaption,
93
+ figure,
94
+ footer,
95
+ hgroup,
96
+ menu,
97
+ nav,
98
+ section,
99
+ img {
100
+ display: block;
101
+ }
102
+ body {
103
+ line-height: 1;
104
+ }
105
+ html,
106
+ body {
107
+ height: 100vh;
108
+ }
109
+ ol,
110
+ ul {
111
+ list-style: none;
112
+ }
113
+ blockquote,
114
+ q {
115
+ quotes: none;
116
+ }
117
+ blockquote:before,
118
+ blockquote:after,
119
+ q:before,
120
+ q:after {
121
+ content: "";
122
+ content: none;
123
+ }
124
+ table {
125
+ border-collapse: collapse;
126
+ border-spacing: 0;
127
+ }
128
+ a {
129
+ text-decoration: none;
130
+ color: inherit;
131
+ }
package/src/log.module.ts CHANGED
@@ -5,15 +5,17 @@ import { LogInterceptor } from "./log.interceptor";
5
5
  import { LogModuleOptions } from "./types";
6
6
  import { TypeOrmModule } from "@nestjs/typeorm";
7
7
  import querystring from "node:querystring";
8
+ import { ApplicationConfig } from "@nestjs/core";
9
+ import { join } from "node:path";
8
10
 
9
11
  @Global()
10
12
  @Module({
11
13
  imports: [TypeOrmModule],
12
- providers: [LogService, MemoryDbService],
14
+ providers: [ApplicationConfig, LogService, MemoryDbService],
13
15
  exports: [TypeOrmModule, LogService, MemoryDbService],
14
16
  })
15
17
  export class LogModule {
16
- public static async connect(
18
+ public static async init(
17
19
  app: any,
18
20
  options?: LogModuleOptions
19
21
  ): Promise<void> {
@@ -24,8 +26,12 @@ export class LogModule {
24
26
  app.useGlobalInterceptors(new LogInterceptor(logService)); // intercept all errors
25
27
 
26
28
  if (options?.path) {
29
+ app.useStaticAssets(join(__dirname, "..", "public"), {
30
+ prefix: options.path,
31
+ });
32
+
27
33
  const httpAdapter = app.getHttpAdapter();
28
- httpAdapter.get(options.path, async (req: any, res: any) => {
34
+ httpAdapter.get(join(options.path, "api"), async (req: any, res: any) => {
29
35
  if (LogService.options?.key) {
30
36
  const params = querystring.parse(req.url.split("?")[1]);
31
37
 
@@ -38,7 +44,7 @@ export class LogModule {
38
44
  });
39
45
  }
40
46
 
41
- if (options) {
47
+ if (options?.database) {
42
48
  await logService.connectDb(options);
43
49
  }
44
50
  }
@@ -101,6 +101,7 @@ export class LogService implements LoggerService {
101
101
  "context",
102
102
  "trace",
103
103
  ],
104
+ order: { updatedAt: "DESC" },
104
105
  });
105
106
  }
106
107
 
@@ -145,7 +146,7 @@ export class LogService implements LoggerService {
145
146
  }
146
147
 
147
148
  private getConnection(): EntityManager {
148
- return LogService.connection.manager || this.memoryDbService;
149
+ return LogService.connection?.manager || this.memoryDbService;
149
150
  }
150
151
 
151
152
  private parseContext(context: ExecutionContextHost): Partial<Context> {
@@ -81,7 +81,9 @@ export class MemoryDbService {
81
81
  };
82
82
  }
83
83
 
84
- return Promise.resolve(this.db[table].map(mapOptions));
84
+ return Promise.resolve(
85
+ this.db[table].map(mapOptions).sort((a, b) => b.updatedAt - a.updatedAt)
86
+ );
85
87
  }
86
88
 
87
89
  public async getOneById(entity: EntitySchema, _id: string): Promise<any> {