更新时间:2025-03-24 GMT+08:00
分享

access日志

实现原理

devspore-http-log打印access日志是使用servlet过滤器的方式来实现的,过滤器名称:DevsporeHttpLogFilter。

使用方式

  1. pom文件添加如下依赖:

    <dependency>
        <groupId>com.huaweicloud.devspore</groupId>
        <artifactId>devspore-http-log</artifactId>
        <version>最新版本</version> 
    </dependency>

  2. 在spring配置文件中添加配置项:devspore.http-log.service-name={your service name}。
  3. 当引入devspore-http-log组件后会自动打印access日志,无需做其他改动。

    如不想打印access日志可通过配置文件设置devspore.http-log.access.enable=false来关闭access日志。

自定义扩展字段

access日志中除打印的固定字段外,用户还可以打印自定义字段。自定义字段的添加方式有如下三种:

  • 以kv形式逐个添加。
    用户可在业务代码中使用devspore-http-log提供的静态方法来添加想要扩展的自定义字段。
    // 1、testkey为打印在access日志中的自定义字段名称, testval为自定义字段的值
    // 2、该段代码可以加在接口中的任意位置,推荐放在service层代码中
    DevsporeHttpLogFilter.addExtraInfo("testkey", "testval");
  • 直接添加所有需要添加的信息。
    // 以下代码可以加在接口中的任意位置,推荐放在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日志字段说明

表1 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

相关文档