@@ -6,8 +6,9 @@ namespace TestBuildingBlocks;
6
6
/// <summary>
7
7
/// Writes incoming and outgoing HTTP messages to the test output window.
8
8
/// </summary>
9
- public sealed class XUnitLogHttpMessageHandler : DelegatingHandler
9
+ public sealed partial class XUnitLogHttpMessageHandler : DelegatingHandler
10
10
{
11
+ private static readonly string BodySeparator = $ "{ Environment . NewLine } { Environment . NewLine } ";
11
12
private readonly ILogger < XUnitLogHttpMessageHandler > _logger ;
12
13
13
14
public XUnitLogHttpMessageHandler ( ITestOutputHelper testOutputHelper )
@@ -23,11 +24,14 @@ protected override async Task<HttpResponseMessage> SendAsync(HttpRequestMessage
23
24
{
24
25
string ? requestBody = request . Content == null ? null : await request . Content . ReadAsStringAsync ( cancellationToken ) ;
25
26
26
- string requestMessage = string . IsNullOrEmpty ( requestBody )
27
- ? $ "--> { request } "
28
- : $ "--> { request } { Environment . NewLine } { Environment . NewLine } { requestBody } ";
29
-
30
- _logger . LogDebug ( requestMessage ) ;
27
+ if ( ! string . IsNullOrEmpty ( requestBody ) )
28
+ {
29
+ LogRequestMessage ( request . ToString ( ) , BodySeparator , requestBody ) ;
30
+ }
31
+ else
32
+ {
33
+ LogRequestMessage ( request . ToString ( ) , string . Empty , string . Empty ) ;
34
+ }
31
35
}
32
36
33
37
HttpResponseMessage response = await base . SendAsync ( request , cancellationToken ) ;
@@ -36,11 +40,14 @@ protected override async Task<HttpResponseMessage> SendAsync(HttpRequestMessage
36
40
{
37
41
string responseBody = await response . Content . ReadAsStringAsync ( cancellationToken ) ;
38
42
39
- string responseMessage = string . IsNullOrEmpty ( responseBody )
40
- ? $ "<-- { response } "
41
- : $ "<-- { response } { Environment . NewLine } { Environment . NewLine } { responseBody } ";
42
-
43
- _logger . LogDebug ( responseMessage ) ;
43
+ if ( ! string . IsNullOrEmpty ( responseBody ) )
44
+ {
45
+ LogResponseMessage ( response . ToString ( ) , BodySeparator , responseBody ) ;
46
+ }
47
+ else
48
+ {
49
+ LogResponseMessage ( response . ToString ( ) , string . Empty , string . Empty ) ;
50
+ }
44
51
}
45
52
46
53
return response ;
@@ -52,4 +59,10 @@ private static ILogger<XUnitLogHttpMessageHandler> CreateLogger(ITestOutputHelpe
52
59
var loggerFactory = new LoggerFactory ( [ loggerProvider ] ) ;
53
60
return loggerFactory . CreateLogger < XUnitLogHttpMessageHandler > ( ) ;
54
61
}
62
+
63
+ [ LoggerMessage ( Level = LogLevel . Debug , SkipEnabledCheck = true , Message = "--> {RequestMessage}{Separator}{RequestBody}" ) ]
64
+ private partial void LogRequestMessage ( string requestMessage , string separator , string requestBody ) ;
65
+
66
+ [ LoggerMessage ( Level = LogLevel . Debug , SkipEnabledCheck = true , Message = "<-- {ResponseMessage}{Separator}{ResponseBody}" ) ]
67
+ private partial void LogResponseMessage ( string responseMessage , string separator , string responseBody ) ;
55
68
}
0 commit comments