如何解决如何在WebAPI应用程序中使用log4net记录API响应
我是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 已响应了(异步方法的等待确保了这一点),因此您可能要检查响应的状态码或内容的长度。
如果日志记录只能在DEV中工作,而不能在TEST / PROD中工作,则可能是权限问题-进行日志记录的过程需要权限才能写入文件位置。尽可能使用日志文件的绝对路径(即E:\ Logs \ MyApp \ MyApp.log)。
值得在应用启动时记录一条日志消息,它周围没有条件逻辑,因此您始终可以确定日志是否有效。
,好的,我有2个问题导致它无法正确记录。
第一件事是因为此行<file value="log\Log_" />
。我从某个网站复制了此配置,我正在其他目录中查找日志,但该日志是在该目录中生成的。一个愚蠢的错误。
一旦我纠正了路径,它就会捕获本地机器中预期的API响应。当我尝试使用"Test message"
时,路径是正确的,然后将其更改为response.Content
并同时更改了配置,这就是为什么它在我正在检查的目录中不起作用的原因。一个人应该一次进行一次更改并进行测试。
然后,我发布了对登台环境的更改,但该更改不起作用。我以为这是一个权限问题,但是经过几次修复后,我发现登台环境中缺少dll文件。丢失的文件名为 RestSharp.dll 。这可能会在将来对某人有所帮助。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。