【问题标题】:How to log an API response using log4net in WebAPI application如何在 WebAPI 应用程序中使用 log4net 记录 API 响应
【发布时间】:2021-01-03 01:36:07
【问题描述】:

我是 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 响应后立即记录响应而不影响性能?

【问题讨论】:

    标签: c# logging asp.net-web-api log4net


    【解决方案1】:

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

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

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

    【讨论】:

    • 好的,我设法捕获了响应,但它只在我的本地机器上工作。当我部署到登台环境时,它有时会创建文件但没有写入日志,有时它根本不会创建文件。有什么想法吗?
    【解决方案2】:

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

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-08-29
      • 2017-10-21
      • 2010-12-28
      相关资源
      最近更新 更多