Contents

.Net 紀錄訪問 Server Request Response Body 方法

常常我們維運時候,沒有記錄一些 log,遇到問題也不知道發生了什麼。最近做一個專案被告知需要紀錄這些資訊,怕線上遇到問題不知道是什麼問題就很難處理。

.Net 6 紀錄 log 大法

.Net 6 原生支援,加上去你的 log 就可以看到 Request 相關資訊。

1
            app.UseHttpLogging();

紀錄 request, response ,header 內容

這邊你會發現 Response 沒有 Body 內容,這邊可以打開。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
            // HttpLogging
            builder.Services.AddHttpLogging(logging =>
            {
                logging.LoggingFields = HttpLoggingFields.All;
                logging.RequestHeaders.Add("Authorization");

                logging.RequestBodyLogLimit = 4096;
                logging.ResponseBodyLogLimit = 4096;

            });
  1. logging.LoggingFieldsHttpLoggingFields.RequestPropertiesAndHeaders | HttpLoggingFields.ResponsePropertiesAndHeaders;

    Warning

    奇怪,你一定會覺得很奇怪,怎麼ResponsePropertiesAndHeaders沒有紀錄 Response Body 內容。

    Flag for logging HTTP Response properties and headers. Includes ResponseStatusCode and ResponseHeaders

    RequestPropertiesAndHeaders沒有紀錄 Authorization

    Flag for logging the HTTP Request Headers. Request Headers are logged as soon as the middleware is invoked. Headers are redacted by default with the character ‘[Redacted]’ unless specified in the RequestHeaders.

    For example: Connection: keep-alive My-Custom-Request-Header: [Redacted]

  2. 預設RequestBodyLogLimitResponseBodyLogLimit32kb,所以可以不用調整這個東西。

  3. 這邊預設 Authorization 是不會記錄到 header 上面,這邊可以把這個資訊紀錄到 log。

其他相關

Log Requests and Responses in ASP.NET Core 3 | by Eric Anderson | ITNEXT