问题描述
Azure API Management 诊断日志开启后,它的默认日志中,并没有记录APIM请求的 Header 和 Body 信息。
那么,还有什么简单的方法来记录所有请求的 Header 或 Body 信息呢?
问题解答
可以的,使用 Trace 策略,然后调用 context.Request.Headers 来获取请求头,context.Request.Body 来获取Body信息。
如,下面的示例是获取全部Headers,并保存为JSON格式:
<trace source="custom-policy" severity="information"> <message>@(Newtonsoft.Json.JsonConvert.SerializeObject(context.Request.Headers.ToDictionary(h => h.Key, h => h.Value.ToArray())))</message> </trace>
记录后的效果截图:
或者是转化为字符串格式:
<trace source="custom-policy" severity="information"> <message>@("{" + string.Join(",\n", context.Request.Headers.Select(h => h.Key + ":" + h.Value.FirstOrDefault())) + "}")</message> </trace>
参考资料
Set Body Policy: https://learn.microsoft.com/en-us/azure/api-management/set-body-policy
Trace Policy: https://learn.microsoft.com/en-us/azure/api-management/trace-policy
当在复杂的环境中面临问题,格物之道需:浊而静之徐清,安以动之徐生。 云中,恰是如此!