5
5
ActionPackageInstalled ,
6
6
ActionSet ,
7
7
Arguments ,
8
- BaseLogger ,
9
8
BeginInstallTypes ,
10
9
createInstallTypingsRequest ,
11
10
EndInstallTypes ,
@@ -27,6 +26,7 @@ import {
27
26
LogLevel ,
28
27
ModuleImportResult ,
29
28
Msg ,
29
+ nowString ,
30
30
nullCancellationToken ,
31
31
nullTypingsInstaller ,
32
32
PackageInstalledResponse ,
@@ -65,6 +65,7 @@ import {
65
65
noopFileWatcher ,
66
66
normalizePath ,
67
67
normalizeSlashes ,
68
+ perfLogger ,
68
69
resolveJSModule ,
69
70
SortedReadonlyArray ,
70
71
startTracing ,
@@ -205,14 +206,16 @@ export function initializeNodeSystem(): StartInput {
205
206
stat ( path : string , callback ?: ( err : NodeJS . ErrnoException , stats : Stats ) => any ) : void ;
206
207
} = require ( "fs" ) ;
207
208
208
- class Logger extends BaseLogger {
209
+ class Logger implements Logger {
210
+ private seq = 0 ;
211
+ private inGroup = false ;
212
+ private firstInGroup = true ;
209
213
private fd = - 1 ;
210
214
constructor (
211
215
private readonly logFilename : string ,
212
216
private readonly traceToConsole : boolean ,
213
- level : LogLevel
217
+ private readonly level : LogLevel
214
218
) {
215
- super ( level ) ;
216
219
if ( this . logFilename ) {
217
220
try {
218
221
this . fd = fs . openSync ( this . logFilename , "w" ) ;
@@ -222,25 +225,67 @@ export function initializeNodeSystem(): StartInput {
222
225
}
223
226
}
224
227
}
225
-
228
+ static padStringRight ( str : string , padding : string ) {
229
+ return ( str + padding ) . slice ( 0 , padding . length ) ;
230
+ }
226
231
close ( ) {
227
232
if ( this . fd >= 0 ) {
228
233
fs . close ( this . fd , noop ) ;
229
234
}
230
235
}
231
-
232
- getLogFileName ( ) {
236
+ getLogFileName ( ) : string | undefined {
233
237
return this . logFilename ;
234
238
}
235
-
239
+ perftrc ( s : string ) {
240
+ this . msg ( s , Msg . Perf ) ;
241
+ }
242
+ info ( s : string ) {
243
+ this . msg ( s , Msg . Info ) ;
244
+ }
245
+ err ( s : string ) {
246
+ this . msg ( s , Msg . Err ) ;
247
+ }
248
+ startGroup ( ) {
249
+ this . inGroup = true ;
250
+ this . firstInGroup = true ;
251
+ }
252
+ endGroup ( ) {
253
+ this . inGroup = false ;
254
+ }
236
255
loggingEnabled ( ) {
237
256
return ! ! this . logFilename || this . traceToConsole ;
238
257
}
258
+ hasLevel ( level : LogLevel ) {
259
+ return this . loggingEnabled ( ) && this . level >= level ;
260
+ }
261
+ msg ( s : string , type : Msg = Msg . Err ) {
262
+ switch ( type ) {
263
+ case Msg . Info :
264
+ perfLogger . logInfoEvent ( s ) ;
265
+ break ;
266
+ case Msg . Perf :
267
+ perfLogger . logPerfEvent ( s ) ;
268
+ break ;
269
+ default : // Msg.Err
270
+ perfLogger . logErrEvent ( s ) ;
271
+ break ;
272
+ }
273
+
274
+ if ( ! this . canWrite ( ) ) return ;
239
275
276
+ s = `[${ nowString ( ) } ] ${ s } \n` ;
277
+ if ( ! this . inGroup || this . firstInGroup ) {
278
+ const prefix = Logger . padStringRight ( type + " " + this . seq . toString ( ) , " " ) ;
279
+ s = prefix + s ;
280
+ }
281
+ this . write ( s , type ) ;
282
+ if ( ! this . inGroup ) {
283
+ this . seq ++ ;
284
+ }
285
+ }
240
286
protected canWrite ( ) {
241
287
return this . fd >= 0 || this . traceToConsole ;
242
288
}
243
-
244
289
protected write ( s : string , _type : Msg ) {
245
290
if ( this . fd >= 0 ) {
246
291
const buf = sys . bufferFrom ! ( s ) ;
@@ -463,7 +508,6 @@ function parseEventPort(eventPortStr: string | undefined) {
463
508
const eventPort = eventPortStr === undefined ? undefined : parseInt ( eventPortStr ) ;
464
509
return eventPort !== undefined && ! isNaN ( eventPort ) ? eventPort : undefined ;
465
510
}
466
-
467
511
function startNodeSession ( options : StartSessionOptions , logger : Logger , cancellationToken : ServerCancellationToken ) {
468
512
const childProcess : {
469
513
fork ( modulePath : string , args : string [ ] , options ?: { execArgv : string [ ] , env ?: MapLike < string > } ) : NodeChildProcess ;
0 commit comments