You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Azure API Management策略层能否实现多API调用的自定义日志记录?

Azure API Management策略层自定义日志记录方案

完全可以在APIM策略层实现自定义日志记录,针对你提到的send-request场景,以下是两种可行的变通方法:

方法1:用Trace策略快速记录到App Insights

Trace策略可以直接将自定义数据发送到已集成的App Insights,支持引用策略变量和表达式,适合快速记录send-request的请求体和响应内容。

实现步骤:

  1. 在send-request前,先把请求体存入变量(方便后续日志调用):
<set-variable name="req1Body" value="@(context.Request.Body.As<string>())" />
  1. 执行send-request后,添加Trace策略记录请求体和响应:
<send-request mode="new" response-variable-name="resp1" timeout="20" ignore-error="true">
    <set-url>...</set-url>
    <set-method>...</set-method>
    <set-body>...</set-body>
</send-request>

<trace source="SendRequest-Log-Req1" severity="information">
    <message>Request 1 Body: @(context.Variables.GetValueOrDefault<string>("req1Body"))</message>
    <message>Request 1 Response: @(((IResponse)context.Variables["resp1"]).Body.As<string>())</message>
    <message>Request 1 Status Code: @(((IResponse)context.Variables["resp1"]).StatusCode)</message>
</trace>

同理,请求2可以复制这套逻辑,替换变量名(req2Body、resp2)即可。

方法2:用Logger策略生成结构化日志到Log Analytics

如果需要更规范的结构化日志(方便后续查询分析),可以用Logger策略将数据发送到Log Analytics工作区。

实现步骤:

  1. 先在APIM中配置指向Log Analytics的Logger(通过门户或ARM模板完成)。
  2. 在策略中添加Logger代码,结构化记录请求和响应:
<set-variable name="req2Body" value="@(context.Request.Body.As<string>())" />

<send-request mode="new" response-variable-name="resp2" timeout="20" ignore-error="true">
    <set-url>...</set-url>
    <set-method>...</set-method>
    <set-body>...</set-body>
</send-request>

<logger category="CustomSendRequestLogs" severity="information">
    <message>@{
        return new JObject(
            new JProperty("requestId", context.RequestId),
            new JProperty("requestSequence", 2),
            new JProperty("requestBody", context.Variables.GetValueOrDefault<string>("req2Body")),
            new JProperty("responseBody", ((IResponse)context.Variables["resp2"]).Body.As<string>()),
            new JProperty("responseStatusCode", ((IResponse)context.Variables["resp2"]).StatusCode),
            new JProperty("timestamp", DateTime.UtcNow.ToString("o"))
        ).ToString();
    }</message>
</logger>

关键注意事项

  • 数据大小控制:如果请求/响应体过大,建议只记录关键字段(比如ID、状态码),避免日志存储成本过高和APIM性能损耗。
  • 敏感数据处理:日志中禁止记录密码、令牌等敏感信息,必要时用<mask>策略对敏感字段进行脱敏。
  • 类型转换:send-request返回的响应变量是IResponse类型,必须强制转换后才能读取Body内容。

内容的提问来源于stack exchange,提问作者Devender S

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.21 14:21:14