nestjs-fox-logger 0.0.2 → 0.0.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/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "nestjs-fox-logger",
3
- "version": "0.0.2",
3
+ "version": "0.0.4",
4
4
  "description": "Модуль логгера для Nestj.js",
5
5
  "author": "Semen Kononets <sploit.strannik@gmail.com, s.d.kononets@foxford.ru>",
6
6
  "license": "MIT",
@@ -1,7 +1,9 @@
1
1
  import { ModuleMetadata, Provider, Type } from '@nestjs/common';
2
+ import { ClsService } from 'nestjs-cls';
2
3
 
3
4
  export interface FoxLoggerServiceOptions {
4
5
  name?: string;
6
+ cls?: ClsService;
5
7
  timestamp?: boolean;
6
8
  }
7
9
 
@@ -16,8 +16,9 @@ describe('FoxLoggerService', () => {
16
16
  ClsModule.forRoot({
17
17
  global: true,
18
18
  }),
19
- FoxLoggerModule.forFeature({
20
- name: 'TEST',
19
+ FoxLoggerModule.forFeatureAsync({
20
+ useFactory: (cls: ClsService) => ({ name: 'TEST', cls }),
21
+ inject: [ClsService],
21
22
  }),
22
23
  ],
23
24
  providers: [FoxLoggerService, ClsService],
@@ -6,95 +6,93 @@ import { FoxLoggerServiceOptions } from './fox-logger.interfaces';
6
6
 
7
7
  @Injectable()
8
8
  export class FoxLoggerService extends Logger {
9
- private readonly name?: string;
9
+ private readonly $name?: string;
10
+ private readonly cls?: ClsService;
10
11
 
11
12
  constructor(
12
13
  @Inject(FOXLOGGER_SERVICE_OPTIONS)
13
14
  readonly options: FoxLoggerServiceOptions,
14
- private readonly cls?: ClsService,
15
15
  ) {
16
16
  super();
17
- this.name = options.name;
17
+ this.$name = options.name;
18
+ this.cls = options.cls;
19
+ }
20
+
21
+ /**
22
+ * Вынимаем данные из разных объектов ошибок
23
+ * и не только, со статусом и пр.
24
+ */
25
+ static FormatObjectMessage(msg: object) {
26
+ const prefix = [
27
+ 'statusCode' in msg && `[${msg.statusCode}]`,
28
+ 'status' in msg && `[${msg.status}]`,
29
+ 'error' in msg && `[${msg.error}]`,
30
+ ].filter(Boolean);
31
+ if (prefix.length > 0) prefix.push(': ');
32
+ const message = [
33
+ msg['response']?.['data']?.['message'] && `: ${msg['data']['message']}`,
34
+ msg['data']?.['message'] && `: ${msg['data']['message']}`,
35
+ msg['message'] && `${msg['message']}`,
36
+ msg['msg'] && `${msg['msg']}`,
37
+ ].filter(Boolean);
38
+ /** Если есть, что отдавать - пишем */
39
+ if (prefix.length + message.length > 0) {
40
+ return prefix.join(``) + message.join(' ');
41
+ }
42
+ return JSON.stringify(msg);
18
43
  }
19
44
 
20
45
  /** Получение сообщения из разных видов данных */
21
- static FormatMsg(msg: unknown) {
46
+ static FormatMessage(msg: unknown) {
22
47
  /** делаем сообщение из разных типов данных */
23
48
  switch (typeof msg) {
24
- case 'string':
25
- return msg;
26
- case 'number':
27
- case 'bigint':
28
- case 'boolean':
29
- case 'symbol':
30
- case 'undefined':
31
- case 'function':
32
- return String(msg);
33
49
  case 'object':
34
- /**
35
- * Вынимаем данные из разных объектов ошибок
36
- * и не только, со статусом и пр.
37
- */
38
- const prefix = [
39
- 'statusCode' in msg && `[${msg.statusCode}]`,
40
- 'status' in msg && `[${msg.status}]`,
41
- 'error' in msg && `[${msg.error}]`,
42
- ].filter(Boolean);
43
- if (prefix.length > 0) prefix.push(': ');
44
- const message = [
45
- msg['response']?.['data']?.['message'] &&
46
- `: ${msg['data']['message']}`,
47
- msg['data']?.['message'] && `: ${msg['data']['message']}`,
48
- msg['message'] && `${msg['message']}`,
49
- msg['msg'] && `${msg['msg']}`,
50
- ].filter(Boolean);
51
- /** Если есть, что отдавать - пишем-с */
52
- if (prefix.length + message.length > 0) {
53
- return prefix.join(``) + message.join(' ');
50
+ if (Array.isArray(msg)) {
51
+ return msg.map(this.FormatObjectMessage).join(`\n`);
54
52
  }
55
- /** В противном случае */
53
+ return this.FormatObjectMessage(msg);
56
54
  default:
57
- JSON.stringify(msg);
55
+ return String(msg);
58
56
  }
59
57
  }
60
58
 
61
59
  /** Задаем префикс на базе имени, cls и возможного id */
62
60
  private getPrefix(eventId?: string) {
63
61
  return (
64
- `${this.name ? `[${this.name}]` : ``}` +
65
- `${this.cls.getId() ? `[${this.cls.getId()}]` : ''}` +
62
+ `${this.$name ? `[${this.$name}]` : ``}` +
63
+ `${this.cls?.getId() ? `[${this.cls?.getId()}]` : ''}` +
66
64
  `${eventId ? `[${eventId}]` : ``}`
67
65
  );
68
66
  }
69
67
 
70
68
  public log(msg: any, eventId?: string) {
71
69
  return Logger.log(
72
- this.getPrefix(eventId) + `: ` + FoxLoggerService.FormatMsg(msg),
70
+ `${this.getPrefix(eventId)}: ${FoxLoggerService.FormatMessage(msg)}`,
73
71
  );
74
72
  }
75
73
  public warn(msg: any, eventId?: string) {
76
74
  return Logger.warn(
77
- this.getPrefix(eventId) + `: ` + FoxLoggerService.FormatMsg(msg),
75
+ `${this.getPrefix(eventId)}: ${FoxLoggerService.FormatMessage(msg)}`,
78
76
  );
79
77
  }
80
78
  public debug(msg: any, eventId?: string) {
81
79
  return Logger.debug(
82
- this.getPrefix(eventId) + `: ` + FoxLoggerService.FormatMsg(msg),
80
+ `${this.getPrefix(eventId)}: ${FoxLoggerService.FormatMessage(msg)}`,
83
81
  );
84
82
  }
85
83
  public error(msg: any, eventId?: string) {
86
84
  return Logger.error(
87
- this.getPrefix(eventId) + `: ` + FoxLoggerService.FormatMsg(msg),
85
+ `${this.getPrefix(eventId)}: ${FoxLoggerService.FormatMessage(msg)}`,
88
86
  );
89
87
  }
90
88
  public verbose(msg: any, eventId?: string) {
91
89
  return Logger.verbose(
92
- this.getPrefix(eventId) + `: ` + FoxLoggerService.FormatMsg(msg),
90
+ `${this.getPrefix(eventId)}: ${FoxLoggerService.FormatMessage(msg)}`,
93
91
  );
94
92
  }
95
93
  public fatal(msg: any, eventId?: string) {
96
94
  return Logger.fatal(
97
- this.getPrefix(eventId) + `: ` + FoxLoggerService.FormatMsg(msg),
95
+ `${this.getPrefix(eventId)}: ${FoxLoggerService.FormatMessage(msg)}`,
98
96
  );
99
97
  }
100
98
  }