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 |