我是log4net&我需要记录API响应。这是我在web.config 中配置它的方式
<log4net>
<appender name="StandardAppenderSync" type="log4net.Appender.RollingFileAppender">
<!-- The standard pattern layout to use -->
<file value="logLog_" />
<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(。
有一条在应用程序启动时记录的日志消息是值得的,它周围没有条件逻辑,所以你总是可以确信日志记录是有效的。
好的,我有两个问题阻碍了它的正确日志记录。
第一件事是因为这条线<file value="logLog_" />
。我从一些网站复制了这个配置;我在另一个目录中查找日志,但它是在那个目录中生成的。一个愚蠢的错误。一旦我纠正了路径,它就捕获了本地机器中预期的API响应。当我尝试使用"Test message"
时,路径是正确的,然后我将其更改为response.Content
&同时更改了配置,这就是为什么它在我检查的目录中不起作用。一个人应该一次做一次改变&测试它。
然后我发布了对暂存环境的更改&它不起作用。我以为这是权限问题,但经过几次尝试修复后,我发现暂存环境中缺少dll文件。缺少名为RestSharp.dll的文件。这可能会在将来对某人有所帮助。