66using Serilog ;
77using Serilog . Core ;
88using Serilog . Formatting . Display ;
9+ using Serilog . Sinks . File ;
910using Serilog . Sinks . RollingFile ;
1011
1112namespace Microsoft . Extensions . Logging . AzureAppServices . Internal
@@ -19,6 +20,7 @@ public class FileLoggerProvider
1920 private readonly int _retainedFileCountLimit ;
2021 private readonly int _backgroundQueueSize ;
2122 private readonly string _outputTemplate ;
23+ private readonly TimeSpan ? _flushPeriod ;
2224
2325 private const string FileNamePattern = "diagnostics-{Date}.txt" ;
2426
@@ -29,7 +31,8 @@ public class FileLoggerProvider
2931 /// <param name="retainedFileCountLimit">A strictly positive value representing the maximum retained file count</param>
3032 /// <param name="backgroundQueueSize">The maximum size of the background queue</param>
3133 /// <param name="outputTemplate">A message template describing the output messages</param>
32- public FileLoggerProvider ( int fileSizeLimit , int retainedFileCountLimit , int backgroundQueueSize , string outputTemplate )
34+ /// <param name="flushPeriod">A period after which logs will be flushed to disk</param>
35+ public FileLoggerProvider ( int fileSizeLimit , int retainedFileCountLimit , int backgroundQueueSize , string outputTemplate , TimeSpan ? flushPeriod )
3336 {
3437 if ( outputTemplate == null )
3538 {
@@ -48,6 +51,7 @@ public FileLoggerProvider(int fileSizeLimit, int retainedFileCountLimit, int bac
4851 _retainedFileCountLimit = retainedFileCountLimit ;
4952 _backgroundQueueSize = backgroundQueueSize ;
5053 _outputTemplate = outputTemplate ;
54+ _flushPeriod = flushPeriod ;
5155 }
5256
5357 /// <inheritdoc />
@@ -69,7 +73,17 @@ public Logger ConfigureLogger(IWebAppLogConfigurationReader reader)
6973
7074 var messageFormatter = new MessageTemplateTextFormatter ( _outputTemplate , null ) ;
7175 var rollingFileSink = new RollingFileSink ( logsFilePattern , messageFormatter , _fileSizeLimit , _retainedFileCountLimit ) ;
72- var backgroundSink = new BackgroundSink ( rollingFileSink , _backgroundQueueSize ) ;
76+
77+ ILogEventSink flushingSink ;
78+ if ( _flushPeriod != null )
79+ {
80+ flushingSink = new PeriodicFlushToDiskSink ( rollingFileSink , _flushPeriod . Value ) ;
81+ }
82+ else
83+ {
84+ flushingSink = rollingFileSink ;
85+ }
86+ var backgroundSink = new BackgroundSink ( flushingSink , _backgroundQueueSize ) ;
7387
7488 var loggerConfiguration = new LoggerConfiguration ( ) ;
7589 loggerConfiguration . WriteTo . Sink ( backgroundSink ) ;
0 commit comments