access日志
实现原理
devspore-http-log打印access日志是使用servlet过滤器的方式来实现的,过滤器名称:DevsporeHttpLogFilter。
使用方式
- pom文件添加如下依赖:
<dependency> <groupId>com.huaweicloud.devspore</groupId> <artifactId>devspore-http-log</artifactId> <version>最新版本</version> </dependency> - 在spring配置文件中添加配置项:devspore.http-log.service-name={your service name}。
- 当引入devspore-http-log组件后会自动打印access日志,无需做其他改动。
如不想打印access日志可通过配置文件设置devspore.http-log.access.enable=false来关闭access日志。
自定义扩展字段
access日志中除打印的固定字段外,用户还可以打印自定义字段。自定义字段的添加方式有如下三种:
- 以kv形式逐个添加。
- 直接添加所有需要添加的信息。
// 以下代码可以加在接口中的任意位置,推荐放在service层代码中 Map<String, Object> extraInfo = new ConcurrentHashMap<>(); // testkey为打印在access日志中的自定义字段名称, testval为自定义字段的值 extraInfo.put("testkey","testval"); DevsporeHttpLogFilter.setExtraInfo(extraInfo); - 在配置文件中指定请求头或响应头key值,和要打印的字段,http-log会在请求头或响应头获取相应信息。
devspore: http-log: service-name: servicecall access: custom-fields-from-req: user: x-user # key值为日志中打印的字段, value为请求头中的key age: x-age # key值为日志中打印的字段, value为请求头中的key custom-fields-from-resp: userResp: x-user # key值为日志中打印的字段, value为响应头中的key
注意:通过以上方式添加扩展字段时,如果添加的扩展字段名称和devspore-httplog内置的固定字段名称一致,则会覆盖其默认值。
access日志示例
"logType": "access",
"traceId": null,
"nenvId": null,
"method": "GET",
"resBodySize": 93,
"params": null,
"userId": null,
"url": "http://localhost:8081/servicecall/consumer/001",
"duration": 90,
"path": "/consumer/{consumer_id}",
"senvId": null,
"service": "servicecall",
"clientIp": "127.0.0.1",
"appId": null,
"startTime": "2023-12-25 09:33:30.589",
"reqBodySize": -1,
"status": 200
} access日志字段说明
字段名 | 字段含义 | 可选/必选 | 对应配置参数 |
|---|---|---|---|
logType | 日志类型 | 必选,值固定为 access | 无 |
service | 微服务名称 | 必选,通过配置文件配置 | devspore.http-log.service-name |
serviceAppId | 微服务的AppID | 必选,通过配置文件配置 | devspore.http-log.service-app-id |
nenvId | 调用方服务APM环境ID | 必选 | 无 |
senvId | Server端APM环境ID | 必选 | 无 |
url | 请求URL | 必选 | 无 |
path | 请求路径(去参数可聚合统计) | 必选 | 无 |
method | 请求HTTP方法 | 必选 | 无 |
params | 请求参数 | 可选,默认值为null | devspore.http-log.params |
reqBodySize | 请求体body大小 | 必选 | 无 |
resBodySize | 返回体body大小 | 必选 | 无 |
appId | HIS网关appId | 必选 | devspore.http-log.app-id-key |
status | 返回状态码 | 必选 | 无 |
traceId | 调用链跟踪ID | 必选 | 无 |
startTime | 请求开始时间 | 必选 | 无 |
duration | 请求时长 | 必选 | 无 |
clientIp | 请求方IP | 必选 | 无 |
userId | 请求所属用户ID | 必选 | 无 |
olcDryRun | 是否开启olc干跑 | 可选 | devspore.http-log.olc |
olcBlockMsg | olc限流信息 | 可选 | devspore.http-log.olc |
subToken | 截断token | 可选 | devspore.http-log.sub-token |
cpuCost | 当前请求所占用的cpu时间-单位(纳秒) | 可选 | devspore.http-log.access.resource-cost |
memCost | 当前请求使用的内存-单位byte | 可选 | devspore.http-log.access.resource-cost |
sqlReadRows | 当前请求共查询了多少行数据库记录 | 可选 | devspore.http-log.access.sql-rows |
sqlAffectedRows | 当前请求共影响了多少行数据库记录 | 可选 | devspore.http-log.access.sql-rows |

