如何在 WebAPI 应用程序中使用 log4net 记录 API 响应

How to log an API response using log4net in WebAPI application

我是 log4net 的新手,我需要记录一个 API 响应。 这就是我在 web.config

中配置它的方式
<log4net>
    <appender name="StandardAppenderSync" type="log4net.Appender.RollingFileAppender">
      <!-- The standard pattern layout to use -->
      <file value="log\Log_" />
      <appendToFile value="true" />
      <rollingStyle value="Date" />
      <maxSizeRollBackups value="-1" />
      <maximumFileSize value="5GB" />
      <lockingModel type="log4net.Appender.FileAppender+MinimalLock" />
      <staticLogFileName value="false" />
      <datePattern value="yyyyMMdd'.txt'" />
      <layout type="log4net.Layout.PatternLayout">
        <conversionPattern value="%date [%thread] %-5level %logger - %message%newline" />
      </layout>
    </appender>
    <root>
      <level value="ALL" />
      <appender-ref ref="StandardAppenderSync" />
    </root>
  </log4net>

这是我用来记录响应的代码。

var client = new RestClient(url);
var request = new RestRequest(Method.POST);
request.AddHeader("header1", header1);
request.AddHeader("header2", header2);
request.AddParameter("parameter1", parameter1);
request.AddParameter("parameter2", parameter2);
IRestResponse response = await client.ExecuteAsync(request);

ILog log = LogManager.GetLogger("mylog");
log.Info(response.Content);

如果我将 response.Content 更改为 "Test message",它会正常记录。我认为问题在于,在执行此行时 log.Info(response.Content); 我们不确定 API 是否已响应,因为它是异步请求。

如何在 API 响应后立即记录响应而不影响性能?

如果记录“测试消息”有效,那么记录设置应该没问题。当执行到达日志记录时 API 已经 响应(异步方法上的 await 确保了这一点)因此您可能想要检查响应的状态代码或长度的内容。

如果日志记录在 DEV 中有效但在 TEST/PROD 中无效,则可能是权限问题 - 执行日志记录的进程需要权限才能写入文件位置。尽可能使用日志文件的绝对路径(即 E:\Logs\MyApp\MyApp.log)。

在应用程序启动时记录一条日志消息是值得的,它周围没有条件逻辑,因此您始终可以确定日志记录是否正常工作。

好的,我有 2 个问题阻止它正确记录。

首先是因为这条线<file value="log\Log_" />。我从某个网站复制了这个配置,我在另一个目录中寻找日志,但它是在那个目录中生成的。一个愚蠢的错误。 一旦我更正了路径,它就会在我的本地机器上按预期捕获 API 响应。当我尝试使用 "Test message" 时,路径是正确的,然后我将其更改为 response.Content 并同时更改了配置,这就是它在我检查的目录中不起作用的原因。一次应该做 1 处更改并进行测试。

然后我发布了对暂存环境的更改,但它没有用。原以为是权限问题,经过多次尝试修复后发现暂存环境中少了一个dll文件。丢失的文件名为 RestSharp.dll。这可能对以后的人有所帮助。