@@ -236,210 +236,6 @@ internal class StreamLogger : IObserver<(PsesLogLevel logLevel, string message)>
236
236
{
237
237
public static StreamLogger CreateWithNewFile ( string path )
238
238
{
239
-
240
- /* Unmerged change from project 'PowerShellEditorServices.Hosting(net461)'
241
- Before:
242
- var fileStream = new FileStream(
243
- path,
244
- FileMode.Create,
245
- FileAccess.Write,
246
- FileShare.Read,
247
- bufferSize: 4096,
248
- FileOptions.SequentialScan);
249
-
250
- return new StreamLogger(new StreamWriter(fileStream, new UTF8Encoding(encoderShouldEmitUTF8Identifier: true)));
251
- }
252
-
253
- private readonly StreamWriter _fileWriter;
254
-
255
- private readonly BlockingCollection<string> _messageQueue;
256
-
257
- private readonly CancellationTokenSource _cancellationSource;
258
-
259
- private readonly Thread _writerThread;
260
-
261
- // This cannot be a bool
262
- // See https://stackoverflow.com/q/6164751
263
- private int _hasCompleted;
264
-
265
- private IDisposable _unsubscriber;
266
-
267
- public StreamLogger(StreamWriter streamWriter)
268
- {
269
- streamWriter.AutoFlush = true;
270
- _fileWriter = streamWriter;
271
- _hasCompleted = 0;
272
- _cancellationSource = new CancellationTokenSource();
273
- _messageQueue = new BlockingCollection<string>();
274
-
275
- // Start writer listening to queue
276
- _writerThread = new Thread(RunWriter)
277
- {
278
- Name = "PSES Stream Logger Thread",
279
- };
280
- _writerThread.Start();
281
- }
282
-
283
- public void OnCompleted()
284
- {
285
- // Ensure we only complete once
286
- if (Interlocked.Exchange(ref _hasCompleted, 1) != 0)
287
- {
288
- return;
289
- }
290
-
291
- _cancellationSource.Cancel();
292
-
293
- _writerThread.Join();
294
-
295
- _unsubscriber.Dispose();
296
- _fileWriter.Flush();
297
- _fileWriter.Close();
298
- _fileWriter.Dispose();
299
- _cancellationSource.Dispose();
300
- _messageQueue.Dispose();
301
- }
302
-
303
- public void OnError(Exception error)
304
- {
305
- OnNext((PsesLogLevel.Error, $"Error occurred while logging: {error}"));
306
- }
307
-
308
- public void OnNext((PsesLogLevel logLevel, string message) value)
309
- {
310
- string message = null;
311
- switch (value.logLevel)
312
- {
313
- case PsesLogLevel.Diagnostic:
314
- message = $"[DBG]: {value.message}";
315
- break;
316
-
317
- case PsesLogLevel.Verbose:
318
- message = $"[VRB]: {value.message}";
319
- break;
320
-
321
- case PsesLogLevel.Normal:
322
- message = $"[INF]: {value.message}";
323
- break;
324
-
325
- case PsesLogLevel.Warning:
326
- message = $"[WRN]: {value.message}";
327
- break;
328
-
329
- case PsesLogLevel.Error:
330
- message = $"[ERR]: {value.message}";
331
- break;
332
- };
333
-
334
- _messageQueue.Add(message);
335
- }
336
-
337
- public void AddUnsubscriber(IDisposable unsubscriber)
338
- {
339
- _unsubscriber = unsubscriber;
340
- }
341
-
342
- public void Dispose()
343
- {
344
- OnCompleted();
345
- }
346
- After:
347
- var fileStream = new(
348
- path,
349
- FileMode.Create,
350
- FileAccess.Write,
351
- FileShare.Read,
352
- bufferSize: 4096,
353
- FileOptions.SequentialScan);
354
-
355
- return new StreamLogger(new StreamWriter(fileStream, new UTF8Encoding(encoderShouldEmitUTF8Identifier: true)));
356
- }
357
-
358
- private readonly StreamWriter _fileWriter;
359
-
360
- private readonly BlockingCollection<string> _messageQueue;
361
-
362
- private readonly CancellationTokenSource _cancellationSource;
363
-
364
- private readonly Thread _writerThread;
365
-
366
- // This cannot be a bool
367
- // See https://stackoverflow.com/q/6164751
368
- private int _hasCompleted;
369
-
370
- private IDisposable _unsubscriber;
371
-
372
- public StreamLogger(StreamWriter streamWriter)
373
- {
374
- streamWriter.AutoFlush = true;
375
- _fileWriter = streamWriter;
376
- _hasCompleted = 0;
377
- _cancellationSource = new CancellationTokenSource();
378
- _messageQueue = new BlockingCollection<string>();
379
-
380
- // Start writer listening to queue
381
- _writerThread = new Thread(RunWriter)
382
- {
383
- Name = "PSES Stream Logger Thread",
384
- };
385
- _writerThread.Start();
386
- }
387
-
388
- public void OnCompleted()
389
- {
390
- // Ensure we only complete once
391
- if (Interlocked.Exchange(ref _hasCompleted, 1) != 0)
392
- {
393
- return;
394
- }
395
-
396
- _cancellationSource.Cancel();
397
-
398
- _writerThread.Join();
399
-
400
- _unsubscriber.Dispose();
401
- _fileWriter.Flush();
402
- _fileWriter.Close();
403
- _fileWriter.Dispose();
404
- _cancellationSource.Dispose();
405
- _messageQueue.Dispose();
406
- }
407
-
408
- public void OnError(Exception error) => OnNext((PsesLogLevel.Error, $"Error occurred while logging: {error}"));
409
-
410
- public void OnNext((PsesLogLevel logLevel, string message) value)
411
- {
412
- string message = null;
413
- switch (value.logLevel)
414
- {
415
- case PsesLogLevel.Diagnostic:
416
- message = $"[DBG]: {value.message}";
417
- break;
418
-
419
- case PsesLogLevel.Verbose:
420
- message = $"[VRB]: {value.message}";
421
- break;
422
-
423
- case PsesLogLevel.Normal:
424
- message = $"[INF]: {value.message}";
425
- break;
426
-
427
- case PsesLogLevel.Warning:
428
- message = $"[WRN]: {value.message}";
429
- break;
430
-
431
- case PsesLogLevel.Error:
432
- message = $"[ERR]: {value.message}";
433
- break;
434
- };
435
-
436
- _messageQueue.Add(message);
437
- }
438
-
439
- public void AddUnsubscriber(IDisposable unsubscriber) => _unsubscriber = unsubscriber;
440
-
441
- public void Dispose() => OnCompleted();
442
- */
443
239
FileStream fileStream = new (
444
240
path ,
445
241
FileMode . Create ,
0 commit comments