LoggerUtils.cs 2.6 KB

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