SAP CPI 日志级别 TRACE:为什么会自动关闭,以及如何安全地保持开启
为什么 SAP CPI 的 TRACE 日志级别约 10 分钟后会回落、它存储什么以及保留多久、在生产环境中的风险,以及如何只在工作期间保持开启。

您把 iFlow 的日志级别设为 Trace,然后花一刻钟测试别的东西,再发送真正要看的那条消息,结果 Trace 是空的。SAP Cloud Integration(SAP CPI)已经悄悄把级别调了回去。这是有意为之;一旦明白原因,使用 TRACE 的规则也就随之清楚了。
本文介绍每个日志级别存储什么、TRACE 为什么会过期、如何安全地使用它,以及如何让它恰好在您工作期间保持开启。
日志级别以及 TRACE 增加了什么
| 日志级别 | 每条消息保存的内容 |
|---|---|
| Info | 总体状态、耗时,以及错误(如有) |
| Debug | 消息运行过的每个步骤各有一条记录 |
| Trace | 与 Debug 相同,另外还有每个步骤之前的消息体、header 和 exchange property |
日志级别设置在已部署的 iFlow 上,因此在设置期间,它适用于该 iFlow 处理的每一条消息。
为什么 TRACE 会自动关闭
TRACE 会把每个步骤的负载、header 和属性写入 tenant 的数据库。在繁忙的 iFlow 上,这是大量数据,而且可能包含个人或机密内容。因此 SAP 在时间上加以限制:TRACE 级别的有效期约为 10 分钟,之后 iFlow 会回到较低的级别,而 Trace 内容本身保留约一小时。
tenant 也可以配置为完全不允许 TRACE。这时无论谁尝试设置,都会失败。
手动设置 TRACE
- 在监控中打开 Manage Integration Content,选择已部署的 iFlow。
- 在它的日志配置中,把日志级别设为 Trace。
- 在接下来的 10 分钟内发送测试消息,并在一小时内查看它们的 Trace。
- 如果工作时间较长,请每 10 分钟重新设置一次 Trace。
安全地使用 TRACE
import com.sap.gateway.ip.core.customdev.util.Message
def Message processData(Message message) {
// Set the exchange property logPayload to "true" (for example from an
// externalized parameter) only while you investigate.
if (message.getProperty("logPayload") == "true") {
def log = messageLogFactory.getMessageLog(message)
log?.addAttachmentAsString("Payload before mapping", message.getBody(String), "text/plain")
}
return message
}- 优先使用测试数据。跟踪一条生产消息,会把该客户的数据在 tenant 中存储一小时。
- 在生产环境中,只在足以回答问题的最短时间内跟踪,并遵守公司的审批规定。
- 不要把 Debug 或 Trace 作为 iFlow 配置的日志级别:每条消息都要为此付出代价。
- 不要把密码或令牌写入 header 或属性,否则 Trace 会把它们显示出来。
- 如果经常需要在日志中查看负载,请通过脚本把它附加到消息处理日志中,并且只在开关打开时这样做:
只在工作期间保持 TRACE 开启
在 Kitegra 中,已打开 iFlow 的「消息」面板里有一个显示「Trace:关闭」的开关。点击一次即可把日志级别设为 TRACE。只要开关开启且该 iFlow 的设计器标签页处于打开状态,扩展就会每 9 分钟重新设置一次 TRACE,赶在 SAP 回落之前;在您最后一次操作该 iFlow 20 分钟后,它就会停止。关闭后会恢复 iFlow 之前的级别。该状态在页面重新加载后仍会保留,按 Alt+Shift+R 可以用键盘切换。
在以下情况下,它会拒绝执行并给出明确提示:iFlow 未部署在所选运行时上、tenant 不允许 TRACE,或选项中的「允许更改租户的操作」已关闭。
要查看 Trace 记录了什么,请参阅在图表上逐步跟踪消息。
Kitegra 如何帮您
Trace 是 Kitegra 中会更改您 tenant 的四个操作之一,只有在您点击时才会执行。上线之前,iFlow Inspector 的设计检查「日志级别过详细」会标出配置的日志级别会跟踪或调试每条消息的 iFlow;iFlow 审查清单把它与其他检查一起做了介绍。
Helper、Message Monitor、iFlow Inspector 和 iFlow Docs 各自统计您使用它们的 iFlow 数:没有 Kitegra 账户时每个模块 5 个,Free 套餐 50 个,Starter 100 个,Pro 300 个;Business 不限。Toolbox 和工作区附加功能免费。比较各套餐。
在下一个 iFlow 中试试
了解 Kitegra 为 SAP Integration Suite 设计器增加了哪些功能,或在 Kitegra 的其他 Chrome 扩展旁查看它。
常见问题
为什么 SAP CPI 中的 TRACE 会自动关闭?
TRACE 会把每个步骤的负载存储在 tenant 中。为了限制数据量,SAP 只让 TRACE 级别保持约 10 分钟,Trace 内容则保留约一小时。
Trace 数据保留多久?
大约一小时。之后消息的日志仍然存在,但被跟踪的消息体、header 和属性已经消失。
在生产环境中使用 TRACE 安全吗?
它会把真实负载存储在 tenant 中,因此请只在足以回答问题的最短时间内使用,尽量使用测试数据,并遵守公司的规定。
Debug 和 Trace 有什么区别?
Debug 为每个步骤记录一条条目。Trace 还会加上每个步骤之前的消息体、header 和 exchange property。
为什么在我的 tenant 上设置 TRACE 失败?
可能是 tenant 不允许 TRACE、iFlow 没有部署在该运行时上,或者您的用户缺少相应角色。在扩展中,也可能是选项里关闭了 tenant 操作。
停止工作后,扩展还会让 TRACE 保持开启吗?
不会。只有在开关开启且您在该 iFlow 中工作时,它才会续期 TRACE,并在您最后一次操作 20 分钟后停止。