/// <summary> /// In order to capture the full set of data during a HTTP request this OWIN plugin must be the first plugin in the chain. /// /// Configure OWIN to trace HTTP requests and responses. Note that capturing request query parameters and request and response data could cause /// data security issues - potentially sensitive data will be logged to Azure table storage. /// /// Therefore by default none of this is captured. /// /// </summary> /// <param name="appBuilder">The OWIN app builder</param> /// <param name="loggerRepository">The repository to use for storing http logs</param> /// <param name="captureRequestParams">True if you wish to capture query parameters, false if not.</param> /// <param name="captureRequestData">True if you wish to capture request data, false if not.</param> /// <param name="captureResponseData">True if you wish to capture response data, falise if not.</param> /// <param name="captureRequestHeaders">To capture all request headers set a single array element of "*" otherwise specify the headers you wish to capture.</param> /// <param name="captureResponseHeaders">To capture all response headers set a single array element of "*" otherwise specify the headers you wish to capture.</param> /// <param name="httpCorrelationHeaderKey"> /// It can be helpful when calling across http boundaries to be able to tie together the flow of events with a correlation ID and by default the logger /// looks for a correlation ID in the header correlation-id. If the header is missing then no correlation ID is used but the logger will work. If you /// wish to disable this behaviour then set this to null or if you want to use a different header then set the header name here. /// /// The HttpCorrelator middleware also in this assembly can be used to add a correlation ID if none is present and should be placed before the logger middleware /// in the pipeline. /// </param> /// <returns></returns> public static IAppBuilder UseHttpLogger(this IAppBuilder appBuilder, IHttpLoggerRepository loggerRepository, bool captureRequestParams = false, bool captureRequestData = false, bool captureResponseData = false, string[] captureRequestHeaders = null, string[] captureResponseHeaders = null, string httpCorrelationHeaderKey = "correlation-id") { appBuilder.Use<HttpLogger>( loggerRepository, captureRequestParams, captureRequestData, captureResponseData, captureRequestHeaders, captureResponseHeaders, httpCorrelationHeaderKey); return appBuilder; }
/// <summary> /// Constructor /// </summary> /// <param name="next">The next piece of middleware to call</param> /// <param name="httpLoggerRepository">The repository to store the http information in</param> /// <param name="captureRequestParams">True if query parameters should be captured, false if they should be removed</param> /// <param name="captureRequestData">True if request data should be persisted to storage, false if not. Currently true is unsupported.</param> /// <param name="captureResponseData">True if response data should be persisted to storage, false if not. Currently true is unsupported.</param> /// <param name="captureRequestHeaders">The set of request headers to capture, a single item of "*" for all headers</param> /// <param name="captureResponseHeaders">The set of response headers to capture, a single item of "*" for all headers</param> /// <param name="httpCorrelationHeaderKey">The name of the header to use for a correlation ID</param> public HttpLogger(OwinMiddleware next, IHttpLoggerRepository httpLoggerRepository, bool captureRequestParams, bool captureRequestData, bool captureResponseData, IEnumerable<string> captureRequestHeaders, IEnumerable<string> captureResponseHeaders, string httpCorrelationHeaderKey) : base(next) { if (captureRequestData || captureResponseData) { throw new NotSupportedException("Not yet supported - arriving in v1"); } _httpLoggerRepository = httpLoggerRepository; _captureRequestParams = captureRequestParams; _httpCorrelationHeaderKey = httpCorrelationHeaderKey; //_captureRequestData = captureRequestData; //_captureResponseData = captureResponseData; _captureRequestHeaders = captureRequestHeaders.ToArray(); _captureResponseHeaders = captureResponseHeaders.ToArray(); }