2
0

LoggerUtils.cs 2.3 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455
  1. using MediaBrowser.Model.Logging;
  2. using System;
  3. using System.Globalization;
  4. using System.Linq;
  5. using MediaBrowser.Model.Services;
  6. using SocketHttpListener.Net;
  7. namespace Emby.Server.Implementations.HttpServer
  8. {
  9. public static class LoggerUtils
  10. {
  11. /// <summary>
  12. /// Logs the request.
  13. /// </summary>
  14. /// <param name="logger">The logger.</param>
  15. /// <param name="request">The request.</param>
  16. public static void LogRequest(ILogger logger, HttpListenerRequest request)
  17. {
  18. var url = request.Url.ToString();
  19. logger.Info("{0} {1}. UserAgent: {2}", request.IsWebSocketRequest ? "WS" : "HTTP " + request.HttpMethod, url, request.UserAgent ?? string.Empty);
  20. }
  21. public static void LogRequest(ILogger logger, string url, string method, string userAgent, QueryParamCollection headers)
  22. {
  23. if (headers == null)
  24. {
  25. logger.Info("{0} {1}. UserAgent: {2}", "HTTP " + method, url, userAgent ?? string.Empty);
  26. }
  27. else
  28. {
  29. var headerText = string.Join(", ", headers.Select(i => i.Name + "=" + i.Value).ToArray());
  30. logger.Info("HTTP {0} {1}. {2}", method, url, headerText);
  31. }
  32. }
  33. /// <summary>
  34. /// Logs the response.
  35. /// </summary>
  36. /// <param name="logger">The logger.</param>
  37. /// <param name="statusCode">The status code.</param>
  38. /// <param name="url">The URL.</param>
  39. /// <param name="endPoint">The end point.</param>
  40. /// <param name="duration">The duration.</param>
  41. public static void LogResponse(ILogger logger, int statusCode, string url, string endPoint, TimeSpan duration, QueryParamCollection headers)
  42. {
  43. var durationMs = duration.TotalMilliseconds;
  44. var logSuffix = durationMs >= 1000 && durationMs < 60000 ? "ms (slow)" : "ms";
  45. var headerText = headers == null ? string.Empty : "Headers: " + string.Join(", ", headers.Where(i => i.Name.IndexOf("Access-", StringComparison.OrdinalIgnoreCase) == -1).Select(i => i.Name + "=" + i.Value).ToArray());
  46. logger.Info("HTTP Response {0} to {1}. Time: {2}{3}. {4} {5}", statusCode, endPoint, Convert.ToInt32(durationMs).ToString(CultureInfo.InvariantCulture), logSuffix, url, headerText);
  47. }
  48. }
  49. }