1- using System . Diagnostics ;
2-
31namespace TinyLogger . IO ;
42
53/// <summary>
64/// Render messages in plain text to a file, optionally with a rolling filename.
75/// </summary>
8- public class FileRenderer ( Func < string > getFileName , LogFileMode logFileMode )
6+ public class FileRenderer ( Func < string > getFileName , LogFileMode logFileMode , TimeProvider timeProvider )
97 : StreamRendererBase
108{
119 private static readonly TimeSpan FileExistsCheckInterval = TimeSpan . FromSeconds ( 2 ) ;
@@ -17,17 +15,22 @@ public class FileRenderer(Func<string> getFileName, LogFileMode logFileMode)
1715 private long lastFileExistsCheckTick = long . MinValue ;
1816
1917 public FileRenderer ( string fileName )
20- : this ( ( ) => fileName , LogFileMode . Append )
18+ : this ( ( ) => fileName , LogFileMode . Append , TimeProvider . System )
2119 {
2220 }
2321
2422 public FileRenderer ( string fileName , LogFileMode logFileMode )
25- : this ( ( ) => fileName , logFileMode )
23+ : this ( ( ) => fileName , logFileMode , TimeProvider . System )
2624 {
2725 }
2826
2927 public FileRenderer ( Func < string > getFileName )
30- : this ( getFileName , LogFileMode . Append )
28+ : this ( getFileName , LogFileMode . Append , TimeProvider . System )
29+ {
30+ }
31+
32+ public FileRenderer ( Func < string > getFileName , LogFileMode logFileMode )
33+ : this ( getFileName , logFileMode , TimeProvider . System )
3134 {
3235 }
3336
@@ -78,7 +81,7 @@ protected override async Task<StreamWriter> GetStreamWriterAsync()
7881 {
7982 streamWriter = new StreamWriter ( LogFile . OpenFile ( fileName , logFileMode ) ) ;
8083
81- lastFileExistsCheckTick = Stopwatch . GetTimestamp ( ) ;
84+ lastFileExistsCheckTick = timeProvider . GetTimestamp ( ) ;
8285
8386 TrySetupFileWatcher ( fileName ) ;
8487 }
@@ -88,13 +91,8 @@ protected override async Task<StreamWriter> GetStreamWriterAsync()
8891
8992 private bool IsFileExistsCheckDue ( )
9093 {
91- var now = Stopwatch . GetTimestamp ( ) ;
92- #if NET
93- var elapsedTime = Stopwatch . GetElapsedTime ( lastFileExistsCheckTick , now ) ;
94- #else
95- var elapsedTicks = now - lastFileExistsCheckTick ;
96- var elapsedTime = TimeSpan . FromTicks ( ( long ) ( elapsedTicks * ( double ) TimeSpan . TicksPerSecond / Stopwatch . Frequency ) ) ;
97- #endif
94+ var now = timeProvider . GetTimestamp ( ) ;
95+ var elapsedTime = timeProvider . GetElapsedTime ( lastFileExistsCheckTick , now ) ;
9896
9997 if ( elapsedTime > FileExistsCheckInterval )
10098 {
0 commit comments