1
+ import ConsoleLogger from './console-logger' ;
2
+
1
3
interface LoggerConfig {
2
4
isLoggingEnabled : boolean ;
3
- logPrefix : string ;
5
+ strategy : LoggerStrategy ;
4
6
}
5
7
6
- interface Log {
8
+ export interface Log {
7
9
args ?: Record < string , unknown > ;
8
10
message : string ;
9
11
}
10
12
11
- type ErrorLog = Log & { err ?: Error } ;
13
+ export type ErrorLog = Log & { err ?: Error } ;
12
14
13
- export interface Logger {
14
- configure ( config : Partial < LoggerConfig > ) : void ;
15
+ export interface LoggerStrategy {
15
16
debug ( log : Log ) : void ;
16
17
error ( log : ErrorLog ) : void ;
17
18
trace ( log : Log ) : void ;
18
19
}
19
20
21
+ export interface Logger extends LoggerStrategy {
22
+ configure ( config : Partial < LoggerConfig > ) : void ;
23
+ }
24
+
20
25
/**
21
- * Default implementation of the Logger interface. Represents a signleton class of console logger.
26
+ * Default implementation of the Logger interface. Represents a signleton class of logger with selected strategy .
22
27
*/
23
28
class DefaultLogger implements Logger {
24
29
private static instance : Logger ;
@@ -37,7 +42,7 @@ class DefaultLogger implements Logger {
37
42
if ( ! DefaultLogger . instance ) {
38
43
const defaultConfig : LoggerConfig = {
39
44
isLoggingEnabled : false ,
40
- logPrefix : '[readmeio]' ,
45
+ strategy : new ConsoleLogger ( ) ,
41
46
} ;
42
47
DefaultLogger . instance = new DefaultLogger ( defaultConfig ) ;
43
48
}
@@ -53,55 +58,30 @@ class DefaultLogger implements Logger {
53
58
}
54
59
55
60
/**
56
- * This method takes a level of the log and a message and formats it to the unified log format
57
- * @returns A formatted log message
58
- */
59
-
60
- private formatMessage ( level : 'DEBUG' | 'ERROR' | 'TRACE' , message : string ) : string [ ] {
61
- return [ `${ level } ${ new Date ( ) . toISOString ( ) } ${ this . config . logPrefix } ${ message } ` ] ;
62
- }
63
-
64
- /**
65
- * Logs a trace message.
66
- * @param log The trace log entry. Contains the message as required field and optional args.
61
+ * Logs an error message.
62
+ * @param log The error log entry. Contains the message and error object as required fields and optional args.
67
63
*/
68
- trace ( { message , args } : Log ) : void {
64
+ error ( log : ErrorLog ) : void {
69
65
if ( ! this . config . isLoggingEnabled ) return ;
70
- const params : unknown [ ] = this . formatMessage ( 'TRACE' , message ) ;
71
- console . log ( ...params ) ;
72
- if ( args ) {
73
- console . dir ( args , { depth : null } ) ;
74
- console . log ( '\n' ) ;
75
- }
66
+ this . config . strategy . error ( log ) ;
76
67
}
77
68
78
69
/**
79
70
* Logs a debug message.
80
71
* @param log The debug log entry. Contains the message as required field and optional args.
81
72
*/
82
- debug ( { message , args } : Log ) : void {
73
+ debug ( log : Log ) : void {
83
74
if ( ! this . config . isLoggingEnabled ) return ;
84
- const params : unknown [ ] = this . formatMessage ( 'DEBUG' , message ) ;
85
- if ( args ) {
86
- params . push ( '\nArguments:' , args ) ;
87
- }
88
- console . debug ( ...params , '\n' ) ;
75
+ this . config . strategy . debug ( log ) ;
89
76
}
90
77
91
78
/**
92
- * Logs an error message.
93
- * @param log The error log entry. Contains the message and error object as required fields and optional args.
79
+ * Logs a trace message.
80
+ * @param log The trace log entry. Contains the message as required field and optional args.
94
81
*/
95
- error ( { message , args , err } : ErrorLog ) : void {
82
+ trace ( log : Log ) : void {
96
83
if ( ! this . config . isLoggingEnabled ) return ;
97
- const params : unknown [ ] = this . formatMessage ( 'ERROR' , message ) ;
98
- if ( args ) {
99
- params . push ( '\nArguments:' , args ) ;
100
- }
101
- if ( err ) {
102
- params . push ( '\n' , err ) ;
103
- }
104
- console . error ( ...params , '\n' ) ;
84
+ this . config . strategy . trace ( log ) ;
105
85
}
106
86
}
107
87
0 commit comments