1
1
import { LoggerService , Injectable } from '@nestjs/common' ;
2
2
import { WinstonModule , WinstonModuleOptions } from 'nest-winston' ;
3
- import { isString } from 'lodash' ;
3
+ import { cloneDeep , isString } from 'lodash' ;
4
4
import { ClientMetadata , SessionMetadata } from 'src/common/models' ;
5
5
6
6
type LogMeta = object ;
@@ -15,14 +15,6 @@ type ErrorOrMeta = Error | LogMeta | string | ClientMetadata | SessionMetadata;
15
15
export class AppLogger implements LoggerService {
16
16
private readonly logger : ReturnType < typeof WinstonModule . createLogger > ;
17
17
18
- static startupContexts = [
19
- 'InstanceLoader' ,
20
- 'RoutesResolver' ,
21
- 'RouterExplorer' ,
22
- 'WebSocketsController' ,
23
- 'NestFactory' ,
24
- ] ;
25
-
26
18
constructor ( loggerConfig : WinstonModuleOptions ) {
27
19
this . logger = WinstonModule . createLogger ( loggerConfig ) ;
28
20
}
@@ -34,14 +26,14 @@ export class AppLogger implements LoggerService {
34
26
* Note: args array might be mutated
35
27
* @param args
36
28
*/
37
- static getContext ( args : ErrorOrMeta [ ] = [ ] ) : string {
29
+ static getContext ( args : ErrorOrMeta [ ] = [ ] ) {
38
30
const lastArg = args ?. [ args . length - 1 ] ;
39
31
40
32
if ( isString ( lastArg ) ) {
41
33
return args . pop ( ) as string ;
42
34
}
43
35
44
- return 'TODO: generic name or null?' ;
36
+ return null ;
45
37
}
46
38
47
39
/**
@@ -52,7 +44,7 @@ export class AppLogger implements LoggerService {
52
44
*/
53
45
static getError ( args : ErrorOrMeta [ ] = [ ] ) : void | { } {
54
46
let error = null ;
55
- const index = args . findIndex ( ( arg ) => ( arg instanceof Error ) ) ;
47
+ const index = args . findIndex ( ( arg ) => arg instanceof Error ) ;
56
48
if ( index > - 1 ) {
57
49
[ error ] = args . splice ( index , 1 ) ;
58
50
}
@@ -77,13 +69,18 @@ export class AppLogger implements LoggerService {
77
69
* @param args
78
70
*/
79
71
static getUserMetadata ( args : ErrorOrMeta [ ] = [ ] ) : {
80
- clientMetadata ?: Partial < ClientMetadata > ,
81
- sessionMetadata ?: SessionMetadata ,
72
+ clientMetadata ?: Partial < ClientMetadata > ;
73
+ sessionMetadata ?: SessionMetadata ;
82
74
} {
83
75
// check for client metadata in args
84
- const clientMetadataIndex = args . findIndex ( ( arg ) => ( arg instanceof ClientMetadata ) ) ;
76
+ const clientMetadataIndex = args . findIndex (
77
+ ( arg ) => arg instanceof ClientMetadata ,
78
+ ) ;
85
79
if ( clientMetadataIndex > - 1 ) {
86
- const [ clientMetadata ] = args . splice ( clientMetadataIndex , 1 ) as ClientMetadata [ ] ;
80
+ const [ clientMetadata ] = args . splice (
81
+ clientMetadataIndex ,
82
+ 1 ,
83
+ ) as ClientMetadata [ ] ;
87
84
return {
88
85
clientMetadata : {
89
86
...clientMetadata ,
@@ -94,9 +91,14 @@ export class AppLogger implements LoggerService {
94
91
}
95
92
96
93
// check for session metadata in args
97
- const sessionMetadataIndex = args . findIndex ( ( arg ) => ( arg instanceof SessionMetadata ) ) ;
94
+ const sessionMetadataIndex = args . findIndex (
95
+ ( arg ) => arg instanceof SessionMetadata ,
96
+ ) ;
98
97
if ( sessionMetadataIndex > - 1 ) {
99
- const [ sessionMetadata ] = args . splice ( sessionMetadataIndex , 1 ) as SessionMetadata [ ] ;
98
+ const [ sessionMetadata ] = args . splice (
99
+ sessionMetadataIndex ,
100
+ 1 ,
101
+ ) as SessionMetadata [ ] ;
100
102
return {
101
103
sessionMetadata,
102
104
} ;
@@ -110,20 +112,21 @@ export class AppLogger implements LoggerService {
110
112
message : string | LogObject ,
111
113
optionalParams : ErrorOrMeta [ ] = [ ] ,
112
114
) {
115
+ const optionalParamsCopy = cloneDeep ( optionalParams ) ;
113
116
const messageObj : LogObject = (
114
117
typeof message === 'object' ? message : { message }
115
118
) as LogObject ;
116
119
117
- const context = AppLogger . getContext ( optionalParams ) ;
118
- const error = AppLogger . getError ( optionalParams ) ;
119
- const userMetadata = AppLogger . getUserMetadata ( optionalParams ) ;
120
+ const context = AppLogger . getContext ( optionalParamsCopy ) ;
121
+ const error = AppLogger . getError ( optionalParamsCopy ) ;
122
+ const userMetadata = AppLogger . getUserMetadata ( optionalParamsCopy ) ;
120
123
121
124
return {
122
125
...messageObj ,
123
126
context,
124
127
error,
125
128
...userMetadata ,
126
- data : optionalParams ?. length ? optionalParams : undefined ,
129
+ data : optionalParamsCopy ?. length ? optionalParamsCopy : undefined ,
127
130
} ;
128
131
}
129
132
0 commit comments