@@ -40,9 +40,8 @@ public async Task CreateLogger_ReturnsNullLogger_WhenDisabled()
40
40
41
41
// Arrange
42
42
var provider = new DeferredLoggerProvider ( testEnvironment ) ;
43
- provider . ProcessBufferedLogs ( new List < ILoggerProvider > ( ) , true ) ; // Disable the provider
43
+ await provider . ProcessBufferedLogsAsync ( new List < ILoggerProvider > ( ) ) ;
44
44
45
- await Task . Delay ( 1000 ) ;
46
45
// Act
47
46
var logger = provider . CreateLogger ( "TestCategory" ) ;
48
47
@@ -63,10 +62,7 @@ public async Task ProcessBufferedLogs_DrainsChannelWithoutProviders()
63
62
logger . LogInformation ( "Test Log Message" ) ;
64
63
65
64
// Act
66
- provider . ProcessBufferedLogs ( new List < ILoggerProvider > ( ) , true ) ; // Process immediately
67
-
68
- // Wait for forwarding task to complete
69
- await Task . Delay ( 100 ) ; // Small delay to ensure the logs are processed
65
+ await provider . ProcessBufferedLogsAsync ( new List < ILoggerProvider > ( ) ) ;
70
66
71
67
// Assert
72
68
Assert . Equal ( 0 , provider . Count ) ; // Ensure channel is drained
@@ -84,11 +80,7 @@ public async Task Dispose_DisablesProviderAndCompletesChannel()
84
80
logger . LogInformation ( "Log before disposal" ) ;
85
81
86
82
// Act
87
- provider . ProcessBufferedLogs ( new List < ILoggerProvider > ( ) , true ) ; // Process immediately
88
- provider . Dispose ( ) ;
89
-
90
- // Wait a short period to ensure the channel is completed
91
- await Task . Delay ( 100 ) ;
83
+ await provider . ProcessBufferedLogsAsync ( new List < ILoggerProvider > ( ) ) ;
92
84
93
85
// Assert
94
86
Assert . False ( provider . CreateLogger ( "TestCategory" ) is DeferredLogger ) ;
@@ -130,7 +122,7 @@ public void Dispose_CanBeCalledMultipleTimesWithoutException()
130
122
}
131
123
132
124
[ Fact ]
133
- public void ProcessBufferedLogs_ThrowsNoExceptionsWhenChannelIsEmpty ( )
125
+ public async Task ProcessBufferedLogs_ThrowsNoExceptionsWhenChannelIsEmpty ( )
134
126
{
135
127
var testEnvironment = new TestEnvironment ( ) ;
136
128
testEnvironment . SetEnvironmentVariable ( EnvironmentSettingNames . AzureWebsitePlaceholderMode , "1" ) ;
@@ -139,8 +131,14 @@ public void ProcessBufferedLogs_ThrowsNoExceptionsWhenChannelIsEmpty()
139
131
var provider = new DeferredLoggerProvider ( testEnvironment ) ;
140
132
var mockLoggerProvider = new Mock < ILoggerProvider > ( ) ;
141
133
134
+ var task = provider . ProcessBufferedLogsAsync ( new [ ] { mockLoggerProvider . Object } ) ;
135
+
136
+ // Close the channel so that ProcessBufferedLogsAsync can complete
137
+ provider . Dispose ( ) ;
138
+
142
139
// Act & Assert (no exceptions should be thrown)
143
- provider . ProcessBufferedLogs ( new [ ] { mockLoggerProvider . Object } , true ) ;
140
+ var exception = await Record . ExceptionAsync ( ( ) => task ) ;
141
+ Assert . Null ( exception ) ;
144
142
}
145
143
146
144
[ Fact ]
@@ -163,15 +161,39 @@ public async Task Dispose_DoNotDisablesProviderAndCompletesChannel()
163
161
testLoggerProvider . SetScopeProvider ( new LoggerExternalScopeProvider ( ) ) ;
164
162
165
163
// Act
166
- provider . ProcessBufferedLogs ( new List < ILoggerProvider > ( ) { testLoggerProvider } , true ) ; // Process immediately
164
+ var task = provider . ProcessBufferedLogsAsync ( new List < ILoggerProvider > ( ) { testLoggerProvider } ) ;
167
165
168
- // Wait a short period to ensure the channel is completed
169
- await Task . Delay ( 100 ) ;
166
+ // Close the channel so that ProcessBufferedLogsAsync can complete
167
+ provider . Dispose ( ) ;
168
+ await task ;
170
169
Assert . Equal ( 0 , provider . Count ) ; // Ensure channel is drained
171
170
172
171
// Assert that the log was forwarded to the testLoggerProvider
173
172
Assert . Equal ( 1 , testLoggerProvider . GetAllLogMessages ( ) . Count ) ;
174
173
Assert . Equal ( Assert . Single ( testLoggerProvider . GetAllLogMessages ( ) ) . FormattedMessage , "Error Log" ) ;
174
+ }
175
+
176
+ [ Fact ]
177
+ public void Dispose_DoNotDisablesProvider ( )
178
+ {
179
+ var testEnvironment = new TestEnvironment ( ) ;
180
+ testEnvironment . SetEnvironmentVariable ( EnvironmentSettingNames . AzureWebsitePlaceholderMode , "0" ) ;
181
+
182
+ // Arrange
183
+ var provider = new DeferredLoggerProvider ( testEnvironment ) ;
184
+ var logger = provider . CreateLogger ( "TestCategory" ) ;
185
+ logger . LogError ( "Error Log" ) ;
186
+
187
+ // Create an instance of IOptionsMonitor<OpenTelemetryLoggerOptions>
188
+ var optionsMonitor = Mock . Of < IOptionsMonitor < OpenTelemetryLoggerOptions > > ( ) ;
189
+
190
+ // Pass the optionsMonitor to the OpenTelemetryLoggerProvider constructor
191
+ //OpenTelemetryLoggerProvider openTelemetryLoggerProvider = new(optionsMonitor);
192
+ TestLoggerProvider testLoggerProvider = new TestLoggerProvider ( ) ;
193
+ testLoggerProvider . SetScopeProvider ( new LoggerExternalScopeProvider ( ) ) ;
194
+
195
+ // Act
196
+ _ = provider . ProcessBufferedLogsAsync ( new List < ILoggerProvider > ( ) { testLoggerProvider } ) ;
175
197
176
198
// Ensure that the LoggerProvider is not disabled and still returns DeferredLogger
177
199
Assert . True ( provider . CreateLogger ( "TestCategory" ) is DeferredLogger ) ;
0 commit comments