如何在WSO2 APIM网关访问日志中展示调用特定API的用户资料信息
WSO2 APIM 4.0.0 自定义网关访问日志配置步骤
步骤1:添加全局自定义请求中介策略,提取所需属性
首先需要创建全局请求中介序列,将用户所属组织、API所有者等信息从JWT声明或者APIM注册表中提取出来,存入Synapse消息上下文:
- 在
<APIM_HOME>/repository/deployment/server/synapse-configs/default/sequences目录下新建custom_log_extractor.xml文件,内容如下:
<sequence name="custom_log_extractor" trace="disable" xmlns="http://ws.apache.org/ns/synapse"> <!-- 提取调用用户用户名 --> <property name="username" expression="$ctx:api.ut.userName"/> <!-- 提取用户所属组织,假设组织信息存在JWT的organization声明中,可根据实际声明名修改 --> <property name="user_organization" expression="$jwt:organization"/> <!-- 提取被调用API名称 --> <property name="invoked_api_name" expression="$ctx:API_NAME"/> <!-- 提取API所有者 --> <property name="api_owner" expression="$ctx:api.ut.apiPublisher"/> <!-- 提取API请求URL --> <property name="api_url" expression="$ctx:REST_URL_POSTFIX"/> <!-- 提取请求 payload,如需完整请求体可自行调整配置 --> <property name="request_payload" expression="$body:json()"/> </sequence>
- 将该序列绑定为全局请求中介,在
<APIM_HOME>/repository/conf/deployment.toml中添加以下配置:
[apim.sync_runtime_artifacts.gateway.global_sequences] request = ["custom_log_extractor"]
步骤2:修改log4j2配置,自定义日志输出格式
打开<APIM_HOME>/repository/conf/log4j2.properties文件,按需做以下修改:
- 如需直接修改默认日志的输出格式,找到
appender.CARBON_LOGFILE.layout.pattern配置项,替换为自定义格式:
appender.CARBON_LOGFILE.layout.pattern = %d{ISO8601} | %X{username} | %X{user_organization} | %X{invoked_api_name} | %X{api_owner} | %X{api_url} | %X{request_payload} | %msg%n
- 如需将自定义访问日志输出到独立文件,可新增自定义appender配置:
appender.CUSTOM_ACCESS_LOG.type = RollingFile appender.CUSTOM_ACCESS_LOG.name = CUSTOM_ACCESS_LOG appender.CUSTOM_ACCESS_LOG.fileName = ${sys:carbon.home}/repository/logs/custom-access.log appender.CUSTOM_ACCESS_LOG.filePattern = ${sys:carbon.home}/repository/logs/custom-access-%d{MM-dd-yyyy}.log appender.CUSTOM_ACCESS_LOG.layout.type = PatternLayout appender.CUSTOM_ACCESS_LOG.layout.pattern = %X{username} | %X{user_organization} | %X{invoked_api_name} | %X{api_owner} | %X{api_url} | %X{request_payload} | %msg%n appender.CUSTOM_ACCESS_LOG.policies.type = Policies appender.CUSTOM_ACCESS_LOG.policies.time.type = TimeBasedTriggeringPolicy appender.CUSTOM_ACCESS_LOG.policies.time.interval = 1 appender.CUSTOM_ACCESS_LOG.policies.time.modulate = true appender.CUSTOM_ACCESS_LOG.strategy.type = DefaultRolloverStrategy appender.CUSTOM_ACCESS_LOG.strategy.max = 30 logger.CUSTOM_ACCESS_LOG.name = org.apache.synapse.transport.http.access logger.CUSTOM_ACCESS_LOG.level = INFO logger.CUSTOM_ACCESS_LOG.additivity = false logger.CUSTOM_ACCESS_LOG.appenderRef.CUSTOM_ACCESS_LOG.ref = CUSTOM_ACCESS_LOG
- 完成新增appender配置后,将其添加到root logger的引用列表中:
rootLogger.appenderRef.CUSTOM_ACCESS_LOG.ref = CUSTOM_ACCESS_LOG
步骤3:重启服务生效
修改完所有配置后重启WSO2 APIM服务,后续网关请求就会按照指定格式输出日志。
注意:如果用户组织信息没有存在JWT声明中,可根据实际存储位置调整中介序列里的取值表达式;如果需要输出响应payload,新增响应中介序列提取响应体存入上下文即可。
内容的提问来源于stack exchange,提问作者Frank
相关产品推荐
相关产品推荐

