15
15
* limitations under the License.
16
16
*/
17
17
18
- import {
19
- LogCallback ,
20
- LogLevelString ,
21
- FirebaseApp ,
22
- LogOptions
23
- } from '@firebase/app-types' ;
24
- import { FirebaseService } from '@firebase/app-types/private' ;
18
+ import { LogCallback , LogLevelString , LogOptions } from '@firebase/app-types' ;
25
19
26
20
/**
27
21
* A container for all of the Logger instances
@@ -48,7 +42,7 @@ export enum LogLevel {
48
42
SILENT
49
43
}
50
44
51
- const levelStringToEnum = {
45
+ const levelStringToEnum : { [ key in LogLevelString ] : LogLevel } = {
52
46
'debug' : LogLevel . DEBUG ,
53
47
'verbose' : LogLevel . VERBOSE ,
54
48
'info' : LogLevel . INFO ,
@@ -70,8 +64,6 @@ const defaultLogLevel: LogLevel = LogLevel.INFO;
70
64
export type LogHandler = (
71
65
loggerInstance : Logger ,
72
66
logType : LogLevel ,
73
- message : string ,
74
- source ?: FirebaseService | FirebaseApp ,
75
67
...args : unknown [ ]
76
68
) => void ;
77
69
@@ -141,7 +133,8 @@ export class Logger {
141
133
}
142
134
143
135
/**
144
- * The log handler for the Logger instance.
136
+ * The main (internal) log handler for the Logger instance.
137
+ * Can be set to a new function in internal package code but not by user.
145
138
*/
146
139
private _logHandler : LogHandler = defaultLogHandler ;
147
140
get logHandler ( ) : LogHandler {
@@ -154,24 +147,41 @@ export class Logger {
154
147
this . _logHandler = val ;
155
148
}
156
149
150
+ /**
151
+ * The optional, additional, user-defined log handler for the Logger instance.
152
+ */
153
+ private _userLogHandler : LogHandler | null = null ;
154
+ get userLogHandler ( ) : LogHandler | null {
155
+ return this . _userLogHandler ;
156
+ }
157
+ set userLogHandler ( val : LogHandler | null ) {
158
+ this . _userLogHandler = val ;
159
+ }
160
+
157
161
/**
158
162
* The functions below are all based on the `console` interface
159
163
*/
160
164
161
- debug ( message : string , source ?: FirebaseService | FirebaseApp ) : void {
162
- this . _logHandler ( this , LogLevel . DEBUG , message , source ) ;
165
+ debug ( ...args : unknown [ ] ) : void {
166
+ this . _userLogHandler && this . _userLogHandler ( this , LogLevel . DEBUG , ...args ) ;
167
+ this . _logHandler ( this , LogLevel . DEBUG , ...args ) ;
163
168
}
164
- log ( message : string , source ?: FirebaseService | FirebaseApp ) : void {
165
- this . _logHandler ( this , LogLevel . VERBOSE , message , source ) ;
169
+ log ( ...args : unknown [ ] ) : void {
170
+ this . _userLogHandler &&
171
+ this . _userLogHandler ( this , LogLevel . VERBOSE , ...args ) ;
172
+ this . _logHandler ( this , LogLevel . VERBOSE , ...args ) ;
166
173
}
167
- info ( message : string , source ?: FirebaseService | FirebaseApp ) : void {
168
- this . _logHandler ( this , LogLevel . INFO , message , source ) ;
174
+ info ( ...args : unknown [ ] ) : void {
175
+ this . _userLogHandler && this . _userLogHandler ( this , LogLevel . INFO , ...args ) ;
176
+ this . _logHandler ( this , LogLevel . INFO , ...args ) ;
169
177
}
170
- warn ( message : string , source ?: FirebaseService | FirebaseApp ) : void {
171
- this . _logHandler ( this , LogLevel . WARN , message , source ) ;
178
+ warn ( ...args : unknown [ ] ) : void {
179
+ this . _userLogHandler && this . _userLogHandler ( this , LogLevel . WARN , ...args ) ;
180
+ this . _logHandler ( this , LogLevel . WARN , ...args ) ;
172
181
}
173
- error ( message : string , source ?: FirebaseService | FirebaseApp ) : void {
174
- this . _logHandler ( this , LogLevel . ERROR , message , source ) ;
182
+ error ( ...args : unknown [ ] ) : void {
183
+ this . _userLogHandler && this . _userLogHandler ( this , LogLevel . ERROR , ...args ) ;
184
+ this . _logHandler ( this , LogLevel . ERROR , ...args ) ;
175
185
}
176
186
}
177
187
@@ -182,28 +192,38 @@ export function setLogLevel(level: LogLevelString | LogLevel): void {
182
192
} ) ;
183
193
}
184
194
185
- export function addLogCallback ( logCallback : LogCallback , options : LogOptions ) {
195
+ export function setUserLogHandler (
196
+ logCallback : LogCallback | null ,
197
+ options : LogOptions
198
+ ) {
199
+ if ( typeof logCallback !== 'function' ) {
200
+ console . warn ( 'First argument to `onLog` must be a function.' ) ;
201
+ return ;
202
+ }
186
203
for ( const index in instances ) {
187
204
const instance = instances [ index ] ;
188
205
let threshhold = instance . logLevel ;
189
206
if ( options && options . level ) {
190
207
threshhold = levelStringToEnum [ options . level ] ;
191
208
}
192
- instance . logHandler = (
193
- instance : Logger ,
194
- level : LogLevel ,
195
- message : string ,
196
- source ?: FirebaseService | FirebaseApp
197
- ) => {
198
- if ( level >= threshhold && message && source ) {
199
- logCallback ( {
200
- level : LogLevel [ level ] . toLowerCase ( ) as LogLevelString ,
201
- message,
202
- type : instance . name ,
203
- source
204
- } ) ;
205
- }
206
- defaultLogHandler ( instance , level , message ) ;
207
- } ;
209
+ if ( logCallback === null ) {
210
+ instance . userLogHandler = null ;
211
+ } else {
212
+ instance . userLogHandler = (
213
+ instance : Logger ,
214
+ level : LogLevel ,
215
+ ...args : unknown [ ]
216
+ ) => {
217
+ const message = args . map ( arg => ( arg as object ) . toString ( ) ) . join ( ' ' ) ;
218
+ if ( level >= threshhold ) {
219
+ logCallback ( {
220
+ level : LogLevel [ level ] . toLowerCase ( ) as LogLevelString ,
221
+ message,
222
+ args,
223
+ type : instance . name
224
+ } ) ;
225
+ }
226
+ } ;
227
+ }
208
228
}
209
229
}
0 commit comments