66using System . Diagnostics ;
77using System . IO ;
88using System . Linq ;
9- using System . Threading ;
109
1110namespace Files . Shared
1211{
1312 public sealed class FileLogger : ILogger
1413 {
15- private readonly SemaphoreSlim semaphoreSlim = new ( 1 ) ;
14+ private readonly object syncRoot = new ( ) ;
1615 private readonly string filePath ;
1716
1817 public FileLogger ( string filePath )
@@ -34,48 +33,43 @@ public void Log<TState>(LogLevel logLevel, EventId eventId, TState state, Except
3433 {
3534 if ( formatter is null )
3635 return ;
37- semaphoreSlim . Wait ( ) ;
3836
3937 try
4038 {
4139 var message = exception ? . ToString ( ) ?? formatter ( state , exception ) ;
4240
43- File . AppendAllText ( filePath , $ "{ DateTime . Now : yyyy-MM-dd HH:mm:ss.ffff} |{ logLevel } |{ message } " + Environment . NewLine ) ;
41+ lock ( syncRoot )
42+ {
43+ File . AppendAllText ( filePath , $ "{ DateTime . Now : yyyy-MM-dd HH:mm:ss.ffff} |{ logLevel } |{ message } " + Environment . NewLine ) ;
44+ }
4445 }
4546 catch ( Exception e )
4647 {
4748 Debug . WriteLine ( $ "Writing to log file failed with the following exception:\n { e } ") ;
4849 }
49- finally
50- {
51- semaphoreSlim . Release ( ) ;
52- }
5350 }
5451
5552 public void PurgeLogs ( int numberOfLinesKept )
5653 {
5754 if ( ! File . Exists ( filePath ) )
5855 return ;
5956
60- semaphoreSlim . Wait ( ) ;
61-
6257 try
6358 {
64- var lines = File . ReadAllLines ( filePath ) ;
65- if ( lines . Length > numberOfLinesKept )
59+ lock ( syncRoot )
6660 {
67- var lastLines = lines . Skip ( Math . Max ( 0 , lines . Length - numberOfLinesKept ) ) ;
68- File . WriteAllLines ( filePath , lastLines ) ;
61+ var lines = File . ReadAllLines ( filePath ) ;
62+ if ( lines . Length > numberOfLinesKept )
63+ {
64+ var lastLines = lines . Skip ( Math . Max ( 0 , lines . Length - numberOfLinesKept ) ) ;
65+ File . WriteAllLines ( filePath , lastLines ) ;
66+ }
6967 }
7068 }
7169 catch ( Exception e )
7270 {
7371 Debug . WriteLine ( $ "Purging the log file failed with the following exception:\n { e } ") ;
7472 }
75- finally
76- {
77- semaphoreSlim . Release ( ) ;
78- }
7973 }
8074 }
8175}
0 commit comments