@@ -4,34 +4,49 @@ interface LogMetadata {
44 [ key : string ] : any ;
55}
66
7- class PinoLogger {
7+ export type PostProcess = (
8+ level : string ,
9+ message : string ,
10+ metadata : Record < string , any >
11+ ) => void ;
12+ const noop : PostProcess = ( ) => { } ;
13+
14+ export class PinoLogger {
815 private pinoLogger : pino . Logger ;
16+ private postProcess : PostProcess ;
917
10- constructor ( ) {
18+ constructor ( postProcess : PostProcess = noop ) {
1119 this . pinoLogger = pino ( {
1220 level : process . env . NODE_ENV === "production" ? "info" : "debug" ,
13- formatters : {
14- level : ( label ) => ( { level : label } )
15- } ,
21+ formatters : { level : ( label ) => ( { level : label } ) } ,
1622 timestamp : pino . stdTimeFunctions . isoTime ,
1723 messageKey : "message"
1824 } ) ;
25+ this . postProcess = postProcess ;
1926 }
2027
2128 debug ( metadata : LogMetadata ) {
22- this . pinoLogger . debug ( metadata || { } ) ;
29+ const meta = metadata || { } ;
30+ this . pinoLogger . debug ( meta ) ;
31+ this . postProcess ( "debug" , meta . message , meta ) ;
2332 }
2433
2534 info ( metadata : LogMetadata ) {
26- this . pinoLogger . info ( metadata || { } ) ;
35+ const meta = metadata || { } ;
36+ this . pinoLogger . info ( meta ) ;
37+ this . postProcess ( "info" , meta . message , meta ) ;
2738 }
2839
2940 warn ( metadata : LogMetadata ) {
30- this . pinoLogger . warn ( metadata || { } ) ;
41+ const meta = metadata || { } ;
42+ this . pinoLogger . warn ( meta ) ;
43+ this . postProcess ( "warn" , meta . message , meta ) ;
3144 }
3245
3346 error ( metadata : LogMetadata ) {
34- this . pinoLogger . error ( metadata || { } ) ;
47+ const meta = metadata || { } ;
48+ this . pinoLogger . error ( meta ) ;
49+ this . postProcess ( "error" , meta . message , meta ) ;
3550 }
3651
3752 httpResponse (
@@ -61,5 +76,12 @@ class PinoLogger {
6176 }
6277}
6378
64- // Singleton instance
65- export const logger = new PinoLogger ( ) ;
79+ let instance : PinoLogger | undefined ;
80+ let initialized = false ;
81+ export function makeInstance ( postProcess ?: PostProcess ) : PinoLogger {
82+ if ( ! initialized || ! instance ) {
83+ instance = new PinoLogger ( postProcess || noop ) ;
84+ initialized = true ;
85+ }
86+ return instance ;
87+ }
0 commit comments