@@ -17,6 +17,18 @@ limitations under the License.
17
17
18
18
import loglevel from "loglevel" ;
19
19
20
+ /** Backwards-compatibility hack to expose `log` to applications that might still be relying on it. */
21
+ interface LoggerWithLogMethod extends Logger {
22
+ /**
23
+ * Output debug message to the logger.
24
+ *
25
+ * @param msg - Data to log.
26
+ *
27
+ * @deprecated prefer {@link Logger.debug}.
28
+ */
29
+ log ( ...msg : any [ ] ) : void ;
30
+ }
31
+
20
32
/** Logger interface used within the js-sdk codebase */
21
33
export interface Logger extends BaseLogger {
22
34
/**
@@ -104,44 +116,37 @@ loglevel.methodFactory = function (methodName, logLevel, loggerName) {
104
116
105
117
/**
106
118
* Implementation of {@link Logger} based on `loglevel`.
107
- *
108
- * @deprecated this shouldn't be public; prefer {@link Logger}.
109
119
*/
110
- export interface PrefixedLogger extends loglevel . Logger , Logger {
111
- /** @deprecated prefer {@link Logger.getChild} */
112
- withPrefix : ( prefix : string ) => PrefixedLogger ;
113
-
114
- /** @deprecated internal property */
115
- prefix : string ;
120
+ interface PrefixedLogger extends loglevel . Logger , LoggerWithLogMethod {
121
+ prefix ?: string ;
116
122
}
117
123
118
- /** Internal utility function to turn a `loglevel.Logger` into a `PrefixedLogger` */
119
- function extendLogger ( logger : loglevel . Logger ) : void {
120
- const prefixedLogger = < PrefixedLogger > logger ;
121
- prefixedLogger . getChild = prefixedLogger . withPrefix = function ( prefix : string ) : PrefixedLogger {
122
- const existingPrefix = this . prefix || "" ;
123
- return getPrefixedLogger ( existingPrefix + prefix ) ;
124
- } ;
125
- }
124
+ /**
125
+ * Internal utility function: gets a {@link Logger} based on `loglevel`.
126
+ *
127
+ * Child loggers produced by {@link Logger.getChild} add the name of the child logger as a prefix on each log line.
128
+ *
129
+ * @param prefix Prefix to add to each logged line. If undefined, no prefix will be added.
130
+ */
131
+ function getPrefixedLogger ( prefix ?: string ) : LoggerWithLogMethod {
132
+ const loggerName = DEFAULT_NAMESPACE + ( prefix === undefined ? "" : `-${ prefix } ` ) ;
133
+ const prefixLogger = loglevel . getLogger ( loggerName ) as PrefixedLogger ;
126
134
127
- function getPrefixedLogger ( prefix : string ) : PrefixedLogger {
128
- const prefixLogger = loglevel . getLogger ( `${ DEFAULT_NAMESPACE } -${ prefix } ` ) as PrefixedLogger ;
129
- if ( prefixLogger . prefix !== prefix ) {
130
- // Only do this setup work the first time through, as loggers are saved by name.
131
- extendLogger ( prefixLogger ) ;
135
+ if ( prefixLogger . getChild === undefined ) {
136
+ // This is a new loglevel Logger which has not been turned into a PrefixedLogger yet.
132
137
prefixLogger . prefix = prefix ;
138
+ prefixLogger . getChild = ( childPrefix ) : Logger => getPrefixedLogger ( ( prefix ?? "" ) + childPrefix ) ;
133
139
prefixLogger . setLevel ( loglevel . levels . DEBUG , false ) ;
134
140
}
141
+
135
142
return prefixLogger ;
136
143
}
137
144
138
145
/**
139
146
* Drop-in replacement for `console` using {@link https://www.npmjs.com/package/loglevel|loglevel}.
140
147
* Can be tailored down to specific use cases if needed.
141
148
*/
142
- export const logger = loglevel . getLogger ( DEFAULT_NAMESPACE ) as PrefixedLogger ;
143
- logger . setLevel ( loglevel . levels . DEBUG , false ) ;
144
- extendLogger ( logger ) ;
149
+ export const logger = getPrefixedLogger ( ) ;
145
150
146
151
/**
147
152
* A "span" for grouping related log lines together.
0 commit comments