1- using Files . Common ;
2- using System ;
3- using System . Collections . Generic ;
1+ using System ;
42using System . Diagnostics ;
53using System . IO ;
6- using System . Linq ;
7- using System . Text ;
84using System . Threading ;
95using System . Threading . Tasks ;
106
@@ -15,70 +11,65 @@ public class Logger
1511 ILogWriter LogWriter { get ; }
1612 SemaphoreSlim semaphoreSlim = new SemaphoreSlim ( 1 ) ;
1713
18- public Logger ( ILogWriter logWriter , [ System . Runtime . CompilerServices . CallerMemberName ] string caller = "" )
14+ public Logger ( ILogWriter logWriter )
1915 {
2016 LogWriter = logWriter ;
2117 }
2218
23- public void Error ( Exception ex , string formattedException , [ System . Runtime . CompilerServices . CallerMemberName ] string caller = "" )
19+ public void Error ( Exception ex , string error = "" , [ System . Runtime . CompilerServices . CallerMemberName ] string caller = "" )
2420 {
25- Log ( type : "ERROR" , caller : caller , message : $ "{ ex . Message } \n \t { formattedException } ") ;
21+ LogAsync ( type : "ERROR" , caller : caller , message : $ "{ error } \n \t { ex } ") ;
2622 }
2723
28- public void Error ( Exception ex , [ System . Runtime . CompilerServices . CallerMemberName ] string caller = "" )
24+ public void UnhandledError ( Exception ex , string error = "" , [ System . Runtime . CompilerServices . CallerMemberName ] string caller = "" )
2925 {
30- Log ( type : "ERROR" , caller : caller , message : $ "{ ex . Message } \n \t { ex } ") ;
26+ LogSync ( type : "ERROR" , caller : caller , message : $ "{ error } \n \t { ex } ") ;
3127 }
3228
3329 public void Error ( string error , [ System . Runtime . CompilerServices . CallerMemberName ] string caller = "" )
3430 {
35- Log ( type : "ERROR" , caller : caller , message : error ) ;
31+ LogAsync ( type : "ERROR" , caller : caller , message : error ) ;
3632 }
3733
38- public void Info ( string info , [ System . Runtime . CompilerServices . CallerMemberName ] string caller = "" )
39- {
40- Log ( type : "INFO" , caller : caller , message : info ) ;
41- }
42-
43- public void Warn ( Exception ex , string warning , [ System . Runtime . CompilerServices . CallerMemberName ] string caller = "" )
34+ public void Warn ( Exception ex , string warning = "" , [ System . Runtime . CompilerServices . CallerMemberName ] string caller = "" )
4435 {
45- Log ( type : "WARN" , caller : caller , message : $ "{ warning } \n \t { ex } ") ;
36+ LogAsync ( type : "WARN" , caller : caller , message : $ "{ warning } \n \t { ex } ") ;
4637 }
4738
4839 public void Warn ( string warning , [ System . Runtime . CompilerServices . CallerMemberName ] string caller = "" )
4940 {
50- Log ( type : "WARN" , caller : caller , message : warning ) ;
41+ LogAsync ( type : "WARN" , caller : caller , message : warning ) ;
5142 }
5243
53- public void Info ( Exception ex , string info , [ System . Runtime . CompilerServices . CallerMemberName ] string caller = "" )
44+ public void Info ( Exception ex , string info = "" , [ System . Runtime . CompilerServices . CallerMemberName ] string caller = "" )
5445 {
55- Log ( type : "INFO" , caller : caller , message : $ "{ info } \n \t { ex } ") ;
46+ LogAsync ( type : "INFO" , caller : caller , message : $ "{ info } \n \t { ex } ") ;
5647 }
5748
58- public void Info ( string info , object obj , [ System . Runtime . CompilerServices . CallerMemberName ] string caller = "" )
49+ public void Info ( string info , [ System . Runtime . CompilerServices . CallerMemberName ] string caller = "" )
5950 {
60- Log ( type : "INFO" , caller : caller , message : string . Format ( info , obj ) ) ;
51+ LogAsync ( type : "INFO" , caller : caller , message : info ) ;
6152 }
6253
63- public void Warn ( Exception ex , [ System . Runtime . CompilerServices . CallerMemberName ] string caller = "" )
54+ public void Info ( string info , object obj , [ System . Runtime . CompilerServices . CallerMemberName ] string caller = "" )
6455 {
65- Log ( type : "WARN " , caller : caller , message : $ " { ex . Message } \n \t { ex } " ) ;
56+ LogAsync ( type : "INFO " , caller : caller , message : string . Format ( info , obj ) ) ;
6657 }
6758
68- private async void Log ( string type , string caller , string message , int attemptNumber = 0 )
59+ private async void LogAsync ( string type , string caller , string message , int attemptNumber = 0 )
6960 {
7061 try
7162 {
7263 await semaphoreSlim . WaitAsync ( ) ;
73- await LogWriter . WriteLineToLog ( $ "{ DateTime . Now : yyyy-MM-dd HH:mm:ss.ffff} |{ type } |{ caller } |{ message } ") ;
64+ await LogWriter . WriteLineToLogAsync ( $ "{ DateTime . Now : yyyy-MM-dd HH:mm:ss.ffff} |{ type } |{ caller } |{ message } ") ;
7465 }
7566 catch ( IOException e ) when ( ! ( e is FileNotFoundException ) )
7667 {
7768 if ( attemptNumber < 5 ) // check the attempt count to prevent a stack overflow exception
7869 {
7970 // Log is likely in use by another process instance, so wait then try again
8071 await Task . Delay ( 50 ) ;
81- Log ( type , caller , message , attemptNumber + 1 ) ;
72+ LogAsync ( type , caller , message , attemptNumber + 1 ) ;
8273 }
8374 else
8475 {
@@ -94,5 +85,22 @@ private async void Log(string type, string caller, string message, int attemptNu
9485 semaphoreSlim . Release ( ) ;
9586 }
9687 }
88+
89+ private void LogSync ( string type , string caller , string message )
90+ {
91+ try
92+ {
93+ semaphoreSlim . Wait ( ) ;
94+ LogWriter . WriteLineToLog ( $ "{ DateTime . Now : yyyy-MM-dd HH:mm:ss.ffff} |{ type } |{ caller } |{ message } ") ;
95+ }
96+ catch ( Exception e )
97+ {
98+ Debug . WriteLine ( $ "Writing to log file failed with the following exception:\n { e } ") ;
99+ }
100+ finally
101+ {
102+ semaphoreSlim . Release ( ) ;
103+ }
104+ }
97105 }
98106}
0 commit comments