99const loglevel = require ( 'loglevel' )
1010const { LogBuilder, LogLevel : Level , Log } = require ( './log-builder' )
1111
12- class Logging {
12+
13+ class Logger {
14+ constructor ( ) {
15+ this . loggers = new Map ( )
16+ this . defaultLoggerName = LogBuilder . createDefaultLogBuilder ( ) . getName ( )
17+ this . loggers . set ( this . defaultLoggerName , new ChildLogger ( loglevel , LogBuilder . createDefaultLogBuilder ( ) . build ( ) ) )
18+ }
19+
20+ getLogger ( log ) {
21+ if ( ! log ) {
22+ return this . loggers . get ( this . defaultLoggerName )
23+ }
24+
25+ if ( typeof log === 'string' ) {
26+ return this . loggers . get ( log ) ?? this . loggers . get ( this . defaultLoggerName )
27+ }
28+
29+ if ( ! ( log instanceof Log ) ) {
30+ return this . loggers . get ( this . defaultLoggerName )
31+ }
32+
33+ const logName = log . getName ( )
34+ if ( ! this . loggers . has ( logName ) ) {
35+ const logger = new ChildLogger ( loglevel . getLogger ( logName ) , log )
36+ this . loggers . set ( logName , logger )
37+ return logger
38+ }
39+
40+ if ( log . createdWithConfig ( ) ) {
41+ const logger = this . loggers . get ( logName )
42+ logger . loglevel . setLevel ( log . getLevel ( ) )
43+ logger . appenders = log . getAppenders ( )
44+ }
45+ return this . loggers . get ( logName )
46+ }
47+
48+ debug ( ) {
49+ const logger = this . getLogger ( )
50+ logger . debug . apply ( logger , arguments )
51+ }
52+
53+ isDebug ( ) {
54+ const logger = this . getLogger ( )
55+ return logger . isDebug ( )
56+ }
57+
58+ info ( ) {
59+ const logger = this . getLogger ( )
60+ logger . info . apply ( logger , arguments )
61+ }
62+
63+ isInfo ( ) {
64+ const logger = this . getLogger ( )
65+ return logger . isInfo ( )
66+ }
67+
68+ warn ( ) {
69+ const logger = this . getLogger ( )
70+ logger . warn . apply ( logger , arguments )
71+ }
72+
73+ error ( ) {
74+ const logger = this . getLogger ( )
75+ logger . error . apply ( logger , arguments )
76+ }
77+ }
78+
79+ class ChildLogger {
1380 constructor ( loglevel , log ) {
1481 this . loglevel = loglevel
15- if ( log ) {
16- this . loglevel . setLevel ( log . getLevel ( ) )
17- this . appenders = log . getAppenders ( )
18- } else {
19- this . appenders = [ ]
20- }
82+ this . loglevel . setLevel ( log . getLevel ( ) )
83+ this . appenders = log . getAppenders ( )
2184 this . name = log . getName ( )
2285 }
2386
2487 debug ( ) {
2588 this . loglevel . debug . apply ( null , arguments )
2689
27- if ( this . appenders . length < 1 ) return
90+ if ( ! this . hasAppenders ( ) ) return
2891
2992 const message = this . formatMessage ( arguments )
3093 this . appenders . forEach ( appender => {
@@ -57,7 +120,7 @@ class Logging {
57120 info ( ) {
58121 this . loglevel . info . apply ( null , arguments )
59122
60- if ( this . appenders . length < 1 ) return
123+ if ( ! this . hasAppenders ( ) ) return
61124
62125 const message = this . formatMessage ( arguments )
63126 this . appenders . forEach ( appender => {
@@ -74,7 +137,7 @@ class Logging {
74137 warn ( ) {
75138 this . loglevel . warn . apply ( null , arguments )
76139
77- if ( this . appenders . length < 1 ) return
140+ if ( ! this . hasAppenders ( ) ) return
78141
79142 const message = this . formatMessage ( arguments )
80143 this . appenders . forEach ( appender => {
@@ -87,7 +150,7 @@ class Logging {
87150 error ( ) {
88151 this . loglevel . error . apply ( null , arguments )
89152
90- if ( this . appenders . length < 1 ) return
153+ if ( ! this . hasAppenders ( ) ) return
91154
92155 const message = this . formatMessage ( arguments )
93156 this . appenders . forEach ( appender => {
@@ -96,40 +159,9 @@ class Logging {
96159 }
97160 } )
98161 }
99- }
100-
101- class Logger extends Logging {
102- constructor ( ) {
103- super ( loglevel , LogBuilder . createDefaultLogBuilder ( ) . build ( ) )
104- this . loggers = new Map ( )
105- }
106162
107- getLogger ( log ) {
108- if ( ! ( log instanceof Log ) && typeof log !== 'string' ) {
109- return this
110- }
111-
112- if ( typeof log === 'string' && ! this . loggers . has ( log ) ) {
113- return this
114- }
115-
116- const logName = log . getName ?. ( ) ?? ( typeof log === 'string' ? log : LogBuilder . createDefaultLogBuilder ( ) . build ( ) . getName ( ) )
117- if ( ! this . loggers . has ( logName ) ) {
118- this . loggers . set ( logName , new ChildLogger ( this . loglevel . getLogger ( logName ) , log ) )
119- }
120- return this . loggers . get ( logName )
121- }
122-
123- setRootLogger ( log ) {
124- this . loglevel . setLevel ( log . getLevel ( ) )
125- this . appenders = log . getAppenders ( )
126- }
127- }
128-
129- class ChildLogger extends Logging {
130- constructor ( loglevel , log ) {
131- super ( loglevel , log )
132- this . name = log . getName ( )
163+ hasAppenders ( ) {
164+ return Array . isArray ( this . appenders ) && this . appenders . length > 0
133165 }
134166}
135167
0 commit comments