فهرست منبع

日志参数化

陈国伟 3 سال پیش
والد
کامیت
9084d07434
2فایلهای تغییر یافته به همراه72 افزوده شده و 5 حذف شده
  1. 68 0
      FastGithub.Configuration/LoggerExtensions.cs
  2. 4 5
      FastGithub.HttpServer/RequestLoggingMilldeware.cs

+ 68 - 0
FastGithub.Configuration/LoggerExtensions.cs

@@ -0,0 +1,68 @@
+using Microsoft.Extensions.Logging;
+using System;
+
+namespace FastGithub
+{
+    /// <summary>
+    /// 日志插值字符串扩展
+    /// </summary>
+    public static class LoggerExtensions
+    {
+        /// <summary>
+        /// 输出日志
+        /// </summary>
+        /// <param name="logger"></param>
+        /// <param name="level"></param>
+        /// <param name="formattableString"></param>
+        public static void Log(this ILogger logger, LogLevel level, FormattableString formattableString)
+            => logger.Log(level, formattableString.Format, formattableString.GetArguments());
+
+        /// <summary>
+        /// 输出Trace日志
+        /// </summary>
+        /// <param name="logger"></param>
+        /// <param name="formattableString"></param>
+        public static void LogTrace(this ILogger logger, FormattableString formattableString)
+            => logger.Log(LogLevel.Trace, formattableString);
+
+        /// <summary>
+        /// 输出Debug日志
+        /// </summary>
+        /// <param name="logger"></param>
+        /// <param name="formattableString"></param>
+        public static void LogDebug(this ILogger logger, FormattableString formattableString)
+            => logger.Log(LogLevel.Debug, formattableString);
+
+        /// <summary>
+        /// 输出Information日志
+        /// </summary>
+        /// <param name="logger"></param>
+        /// <param name="formattableString"></param>
+        public static void LogInformation(this ILogger logger, FormattableString formattableString)
+            => logger.Log(LogLevel.Information, formattableString);
+
+        /// <summary>
+        /// 输出Warning日志
+        /// </summary>
+        /// <param name="logger"></param>
+        /// <param name="formattableString"></param>
+        public static void LogWarning(this ILogger logger, FormattableString formattableString)
+            => logger.Log(LogLevel.Warning, formattableString);
+
+        /// <summary>
+        /// 输出日志
+        /// </summary>
+        /// <param name="logger"></param>
+        /// <param name="formattableString"></param>
+        public static void LogError(this ILogger logger, FormattableString formattableString)
+            => logger.Log(LogLevel.Error, formattableString);
+
+        /// <summary>
+        /// 输出Critical日志
+        /// </summary>
+        /// <param name="logger"></param>
+        /// <param name="formattableString"></param>
+        public static void LogCritical(this ILogger logger, FormattableString formattableString)
+            => logger.Log(LogLevel.Critical, formattableString);
+    }
+}

+ 4 - 5
FastGithub.HttpServer/RequestLoggingMilldeware.cs

@@ -51,20 +51,19 @@ namespace FastGithub.HttpServer
             }
 
             var request = context.Request;
-            var response = context.Response;
-            var message = $"{request.Method} {request.Scheme}://{request.Host}{request.Path} responded {response.StatusCode} in {stopwatch.Elapsed.TotalMilliseconds} ms";
+            var response = context.Response; 
             var exception = context.GetForwarderErrorFeature()?.Exception;
             if (exception == null)
             {
-                this.logger.LogInformation(message);
+                this.logger.LogInformation($"{request.Method} {request.Scheme}://{request.Host}{request.Path} responded {response.StatusCode} in {stopwatch.Elapsed.TotalMilliseconds} ms");
             }
             else if (IsError(exception))
             {
-                this.logger.LogError($"{message}{Environment.NewLine}{exception}");
+                this.logger.LogError($"{request.Method} {request.Scheme}://{request.Host}{request.Path} responded {response.StatusCode} in {stopwatch.Elapsed.TotalMilliseconds} ms{Environment.NewLine}{exception}");
             }
             else
             {
-                this.logger.LogWarning($"{message}{Environment.NewLine}{GetMessage(exception)}");
+                this.logger.LogWarning($"{request.Method} {request.Scheme}://{request.Host}{request.Path} responded {response.StatusCode} in {stopwatch.Elapsed.TotalMilliseconds} ms{Environment.NewLine}{GetMessage(exception)}");
             }
         }