1
1
// Copyright (c) .NET Foundation. All rights reserved.
2
2
// Licensed under the MIT License. See License.txt in the project root for license information.
3
3
4
+ using System ;
5
+ using System . Diagnostics ;
4
6
using System . Net . Http ;
5
7
using System . Threading ;
6
8
using System . Threading . Tasks ;
@@ -13,22 +15,37 @@ namespace Microsoft.Azure.WebJobs.Script.WebHost.Handlers
13
15
public class SystemTraceHandler : DelegatingHandler
14
16
{
15
17
private readonly HttpConfiguration _config ;
18
+ private TraceWriter _traceWriter ;
16
19
17
20
public SystemTraceHandler ( HttpConfiguration config )
18
21
{
19
22
_config = config ;
20
23
}
21
24
25
+ private TraceWriter TraceWriter
26
+ {
27
+ get
28
+ {
29
+ if ( _traceWriter == null )
30
+ {
31
+ _traceWriter = _config . DependencyResolver
32
+ . GetService < TraceWriter > ( )
33
+ . WithSource ( ScriptConstants . TraceSourceHttpHandler ) ;
34
+ }
35
+
36
+ return _traceWriter ;
37
+ }
38
+ }
39
+
22
40
protected override async Task < HttpResponseMessage > SendAsync ( HttpRequestMessage request , CancellationToken cancellationToken )
23
41
{
24
- var traceWriter = _config . DependencyResolver . GetService < TraceWriter > ( ) ;
25
42
var details = new JObject
26
43
{
27
44
{ "requestId" , request . GetRequestId ( ) } ,
28
45
{ "method" , request . Method . ToString ( ) } ,
29
46
{ "uri" , request . RequestUri . LocalPath . ToString ( ) }
30
47
} ;
31
- traceWriter . Info ( $ "Executing HTTP request: { details } ") ;
48
+ TraceWriter . Info ( $ "Executing HTTP request: { details } ") ;
32
49
33
50
var response = await base . SendAsync ( request , cancellationToken ) ;
34
51
@@ -39,14 +56,14 @@ protected override async Task<HttpResponseMessage> SendAsync(HttpRequestMessage
39
56
{ "uri" , request . RequestUri . LocalPath . ToString ( ) } ,
40
57
{ "authorizationLevel" , request . GetAuthorizationLevel ( ) . ToString ( ) }
41
58
} ;
42
- traceWriter . Info ( $ "Executed HTTP request: { details } ") ;
59
+ TraceWriter . Info ( $ "Executed HTTP request: { details } ") ;
43
60
44
61
details = new JObject
45
62
{
46
63
{ "requestId" , request . GetRequestId ( ) } ,
47
64
{ "status" , response . StatusCode . ToString ( ) }
48
65
} ;
49
- traceWriter . Info ( $ "Response details: { details } ") ;
66
+ TraceWriter . Info ( $ "Response details: { details } ") ;
50
67
51
68
return response ;
52
69
}
0 commit comments