@@ -128,18 +128,25 @@ interface PrefixedLogger extends loglevel.Logger, LoggerWithLogMethod {
128
128
*
129
129
* @param prefix Prefix to add to each logged line. If undefined, no prefix will be added.
130
130
*/
131
- function getPrefixedLogger ( prefix ?: string ) : LoggerWithLogMethod {
131
+ function getPrefixedLogger ( prefix ?: string ) : PrefixedLogger {
132
132
const loggerName = DEFAULT_NAMESPACE + ( prefix === undefined ? "" : `-${ prefix } ` ) ;
133
133
const prefixLogger = loglevel . getLogger ( loggerName ) as PrefixedLogger ;
134
-
134
+ // This is a save cast since export const logger is constructed with getPrefixedLogger
135
+ // It is downcastet to `Logger` to minimize the public/exported api.
135
136
if ( prefixLogger . getChild === undefined ) {
136
137
// This is a new loglevel Logger which has not been turned into a PrefixedLogger yet.
137
138
prefixLogger . prefix = prefix ;
138
139
prefixLogger . getChild = ( childPrefix ) : Logger => {
139
- const childLogger = getPrefixedLogger ( ( prefix ?? "" ) + childPrefix ) as unknown as loglevel . Logger ;
140
- childLogger . methodFactory = ( logger as unknown as loglevel . Logger ) . methodFactory ;
141
- childLogger . setLevel ( childLogger . getLevel ( ) ) ;
142
- return childLogger as unknown as Logger ;
140
+ const rootLogger = logger as PrefixedLogger ;
141
+ // create the new child logger
142
+ const childLogger = getPrefixedLogger ( ( prefix ?? "" ) + childPrefix ) ;
143
+ // assign the same methodFactory as the root logger.
144
+ // this is useful if we add extensions to the root logger that modify
145
+ // its methodFactory. (an example extension is: storing each log to a rageshake db)
146
+ childLogger . methodFactory = rootLogger . methodFactory ;
147
+ // rebuild the child logger with the new methodFactory.
148
+ childLogger . rebuild ( ) ;
149
+ return childLogger as Logger ;
143
150
} ;
144
151
prefixLogger . setLevel ( loglevel . levels . DEBUG , false ) ;
145
152
}
@@ -151,7 +158,7 @@ function getPrefixedLogger(prefix?: string): LoggerWithLogMethod {
151
158
* Drop-in replacement for `console` using {@link https://www.npmjs.com/package/loglevel|loglevel}.
152
159
* Can be tailored down to specific use cases if needed.
153
160
*/
154
- export const logger = getPrefixedLogger ( ) ;
161
+ export const logger = getPrefixedLogger ( ) as LoggerWithLogMethod ;
155
162
156
163
/**
157
164
* A "span" for grouping related log lines together.
0 commit comments