Skip to content

日志组件-配置说明

基础配置

zeka-stack.logging.app-name

使用此配置来区分不同应用的日志目录, 默认为应用名, 此配置只对 log4j2-flie.xml 有效. 最终保存的日志位置为: ${zeka-stack.logging.file.path}/${spring.application.name}/${zeka-stack.logging.file.name}.

默认值: 应用名(最终读取的是 pom.xml 中的 package.name 属性)

zeka-stack.logging.config

指定日志配置文件, 本地开发环境为 log4j2-console.xml, 日志只会输出到控制台; 非本地开发环境为 log4j2-file.xml, 日志只会输出到文件. 如果使用 log4j2-file.xml 配置, 默认会将日志输出到 /mnt/syslogs/zeka.stack, 默认的日志文件名为 all.log, 分别使用 zeka-stack.logging.file.pathzeka-stack.logging.file.name 修改. 使用 IDE 启动的应用( 包括单元测试)都为本地开发环境, 如果需要切换日志配置, 可通过此配置切换, 如果默认的日志配置无法满足业务, 可自定义 log4j2-custom.xml, 并指定日志配置名进行覆盖.

zeka-stack.logging.enable-show-location

是否输出 location (此配置只对 log4j2-console.xml 有效, 因为会存在性能损耗. 用于快速跳转到日志输出语句, 本地开发时能更友好的进行调试)

本地开发且没有设置, 则默认开启.

默认值: false

zeka-stack.logging.file.clean-history-on-start

启动应用时清理历史日志, 此配置只对 log4j2-flie.xml 有效.

默认值: false

zeka-stack.logging.file.max-history

历史日志最大保留时间(天), 此配置只对 log4j2-flie.xml 有效

默认值: 90

zeka-stack.logging.file.max-size

日志文件最大容量, 此配置只对 log4j2-flie.xml 有效.

默认值: 50MB

zeka-stack.logging.file.name

日志文件名, 此配置只对 log4j2-flie.xml 有效.

默认值: all.log

zeka-stack.logging.file.path

日志保存路径, 此配置只对 log4j2-flie.xml 有效

默认值: /mnt/syslogs/zeka.stack

zeka-stack.logging.file.total-size-cap

日志总数量, 此配置只对 log4j2-flie.xml 有效

默认值: 50

zeka-stack.logging.level

yaml
zeka-stack:
  logging:
    level:
      root: error
      project: info
    group:
      test: sample.logsystem, sample1.logsystem

root 不是必须的, 推荐生产环境配置为 error (生产环境默认为 warn). project 是下面 group 的分组名, 详情见 zeka-stack.logging.group.

zeka-stack.logging.group

日志等级分组配置, 用于多个 package 下相同日志等级的简化配置.

yaml
zeka-stack:
  logging:
    level:
      test: error
    group:
      test: sample1.aaa, sample2.bbb

一个 test 组可以配置多个 package.

其他默认的 group 和默认等级:

java
// 内置的 group
static {
    MultiValueMap<String, String> loggers = new LinkedMultiValueMap<>();
    loggers.add("project", "dev.dong4j.zeka");
    loggers.add("starter", "dev.dong4j.zeka.starter");
    loggers.add("captcha", "dev.dong4j.zeka.starter.captcha");
    loggers.add("cache", "dev.dong4j.zeka.starter.cache");
    loggers.add("dubbo", "dev.dong4j.zeka.starter.cache");
    loggers.add("endpoint", "dev.dong4j.zeka.starter.endpoint");
    loggers.add("feign", "dev.dong4j.zeka.starter.feign");
    loggers.add("agent", "dev.dong4j.zeka.agent");
    loggers.add("mybatis", "dev.dong4j.zeka.starter.mybatis");
    loggers.add("rest", "dev.dong4j.zeka.starter.rest");
    loggers.add("security", "dev.dong4j.zeka.starter.security");
    loggers.add("test", "dev.dong4j.zeka.starter.test");
    loggers.add("mongo", "dev.dong4j.zeka.starter.mongo");
    DEFAULT_GROUP_LOGGERS = Collections.unmodifiableMap(loggers);
}

// 内置的 group 默认等级
static {
    MultiValueMap<LogLevel, String> loggers = new LinkedMultiValueMap<>();
    loggers.add(LogLevel.DEBUG, "project");
    loggers.add(LogLevel.DEBUG, "starter");
    loggers.add(LogLevel.DEBUG, "captcha");
    loggers.add(LogLevel.DEBUG, "cache");
    loggers.add(LogLevel.DEBUG, "dubbo");
    loggers.add(LogLevel.DEBUG, "endpoint");
    loggers.add(LogLevel.DEBUG, "feign");
    loggers.add(LogLevel.DEBUG, "agent");
    loggers.add(LogLevel.DEBUG, "mybatis");
    loggers.add(LogLevel.DEBUG, "rest");
    loggers.add(LogLevel.DEBUG, "security");
    loggers.add(LogLevel.DEBUG, "test");
    loggers.add(LogLevel.DEBUG, "mongo");
    STARTER_LOGGING_LOGGERS = Collections.unmodifiableMap(loggers);
}

zeka-stack.logging.pattern.console

输出到控制台的日志格式.

默认值: %clr{%d{yyyy-MM-dd HH:mm:ss.SSS}}{faint} %clr{[%5p]} [%appType] [%traceId] %clr{-}{faint} %clr{[%15.15t]}{faint} %location{.} %clr{::}{faint} %m%n%xwEx

zeka-stack.logging.pattern.dateformat

日志中的时间格式.

默认值: yyyy-MM-dd HH:mm:ss.SSS

zeka-stack.logging.pattern.file

输出到文件的格式, 此配置只对 log4j2-flie.xml 有效.

默认值: %d{yyyy-MM-dd HH:mm:ss.SSS} %5p [%traceId] - [%15.15t] %c{1.} :: %m%n%xwEx

zeka-stack.logging.pattern.level

日志等级输出格式.

默认值: %5p

zeka-stack.logging.pattern.marker

Marker 日志格式.

默认值: %m%n

zeka-stack.logging.pattern.rolling-file-name

日志回滚的文件名格式.

默认值: %d{yyyyMMdd-HH}.%i.log.gz

请求日志

为了便于排查问题, 我们记录了一些关键的请求日志, 比如网关的路由日志, Web 容器日志等. 不过最好在需要排查问题时开启, 避免大量日志导致性能损耗.

网关日志

按照如下方式开启网关日志:

yaml
zeka-stack:
	gateway:
		enable-record: true
	logging:
		level:
			project: trace

日志等级设置为 trace 且开启 enable-record 才会输出 trace 到 gateway.log

输出的日志内容如下:

请求开始时间: 2021-04-27 16:34:21:022
---------------------------
原始请求:
GET http://dev.gateway.server:18080/center-invoice/agent?data=eyJ3YXliaWxsSWRzIjpbNzM4ODEsNzM4ODIsNzM4ODMsNzM4ODQsNzM4ODUsNzM4ODYsNzM5ODcsNzM5OTUsNzQwMDQsNzQwNDcsNzQwNDksNzQwNTMsNzQwNTQsNzQwNTUsNzcxMjIsNzcxMjMsNzcxMjUsNzcxNDQsNzcxNDUsNzcxNDYsNzcxNDcsNzcxNDgsNzcxODQsNzcxODYsNzcxODksNzcxOTAsNzcyMDMsNzcyMDQsNzcyMjQsNzcyMjUsNzcyMjcsNzcyNTYsMTYzNzgsMTYzODAsMTYzODEsMTYzODIsMTYzODMsMTYzODQsMTYzODUsMTYzODYsMTYzODcsMTYzODksMTYzOTAsMTYzOTMsMTYzOTRdfQ
------------ 请求头 ------------
Accept:application/json, application/*+json
X-Agent-Version:1.0.0
X-Trace-Plugin:agent.plugin.enable
X-Agent-Api:invoice-detail.findInvoiceApplyIds
Netflix.NFHttpClient.Version:1.0
X-netflix-httpclientname:gateway
Host:dev.gateway.server:18080
Connection:Keep-Alive
User-Agent:Apache-HttpClient/4.5.5 (Java/1.8.0_211)
X-Trace-Id:1386961902715031552
------------ end ------------

代理请求:
GET http://dev.gateway.server:18089/agent?data=eyJ3YXliaWxsSWRzIjpbNzM4ODEsNzM4ODIsNzM4ODMsNzM4ODQsNzM4ODUsNzM4ODYsNzM5ODcsNzM5OTUsNzQwMDQsNzQwNDcsNzQwNDksNzQwNTMsNzQwNTQsNzQwNTUsNzcxMjIsNzcxMjMsNzcxMjUsNzcxNDQsNzcxNDUsNzcxNDYsNzcxNDcsNzcxNDgsNzcxODQsNzcxODYsNzcxODksNzcxOTAsNzcyMDMsNzcyMDQsNzcyMjQsNzcyMjUsNzcyMjcsNzcyNTYsMTYzNzgsMTYzODAsMTYzODEsMTYzODIsMTYzODMsMTYzODQsMTYzODUsMTYzODYsMTYzODcsMTYzODksMTYzOTAsMTYzOTMsMTYzOTRdfQ
------------ 请求头 ------------
Accept:application/json, application/*+json
X-Agent-Version:1.0.0
X-Trace-Plugin:agent.plugin.enable
X-Agent-Api:invoice-detail.findInvoiceApplyIds
Netflix.NFHttpClient.Version:1.0
X-netflix-httpclientname:gateway
Host:dev.gateway.server:18080
Connection:Keep-Alive
User-Agent:Apache-HttpClient/4.5.5 (Java/1.8.0_211)
X-Trace-Id:1386961902715031552
------------ end ------------

响应:200 OK
------------ 响应头 ------------
Vary:Origin
Vary:Access-Control-Request-Method
Vary:Access-Control-Request-Headers
X-Trace-Id:1386961902715031552
Content-Type:application/json; charset=UTF-8
Content-Length:145
Date:Tue, 27 Apr 2021 08:34:21 GMT
Cache-Control:no-cache, no-store, max-age=0, must-revalidate
Pragma:no-cache
Expires:0
X-Content-Type-Options:nosniff
X-Frame-Options:DENY
X-XSS-Protection:1 ; mode=block
Referrer-Policy:no-referrer
------------ body ------------
{"type":"StandardResult","code":"2000","success":true,"data":[{"invoice_apply_id":772,"waybill_id":74004}],"message":"请求成功","traceId":""}
------------ end ------------

请求结束时间:  2021-04-27 16:34:21:031

如果要关闭网关日志, 只需将日志等级修改为非 trace.

容器日志

只要是 Web 服务, 都会记录所有的 访问日志, 日志文件默认在 /mnt/syslogs/zeka.stack/applicationName/undertow/access.log

输出的日志内容如下:

[2021-04-27 17:09:46.093] "GET /agent?data=MQ HTTP/1.1" 200 (144 ms) (136 bytes) 1386970816159477760 UserAgentService.retureNull_1.0.0,Java/1.8.0_192 - - 127.0.0.1

主要字段说明:

  • (144 ms): 耗时
  • (136 bytes): 请求参数字节数
  • 1386970816159477760: traceId
  • UserAgentService.retureNull_1.0.0: apiName

配置如下(全部为默认值, 如果没有特殊需求, 可不用配置):

yaml
server:
  undertow:
    threads:
      io: 16
      worker: 256
    buffer-size: 1024
    direct-buffers: true
    accesslog:
      dir: undertow
      prefix: access
      suffix: .log
      enabled: true
      pattern: '%t %a "%r" %s (%D ms)'

Agent Service 容器日志

yaml
zeka-stack:
	agent:
		enable-container-log: true
	logging:
		level:
			project: trace

开启后会将容器日志输出到 trace.log 文件中(后期可能会修改).

输出的日志内容如下:

----------------------------REQUEST---------------------------
               URI=/agent
 characterEncoding=null
     contentLength=-1
       contentType=[application/json]
            header=X-Agent-Host=127.0.0.1
            header=Accept=application/json
            header=X-Trace-Plugin=agent.plugin.enable
            header=X-Agent-Appname=N/A
            header=X-Agent-Version=1.0.0
            header=X-Agent-Api=UserAgentService.retureNull
            header=User-Agent=Java/1.8.0_192
            header=X-Trace-Id=1386965994905370624
            header=X-Agent-Appid=xxx
            header=Connection=keep-alive
            header=X-Agent-Tenantid=
            header=Content-Type=application/json
            header=Host=127.0.0.1:18080
            locale=[]
            method=GET
         parameter=data=MQ
          protocol=HTTP/1.1
       queryString=data=MQ
        remoteAddr=/127.0.0.1:53328
        remoteHost=localhost
            scheme=http
              host=127.0.0.1:18080
        serverPort=18080
          isSecure=false
--------------------------RESPONSE--------------------------
     contentLength=136
       contentType=application/json; charset=UTF-8
            header=Connection=keep-alive
            header=X-Agent-Request-Id=9eb6d923a7a7ec9f14c8ed6ae4664a44
            header=Content-Type=application/json; charset=UTF-8
            header=Content-Length=136
            header=X-Trace-Id=1386965994905370624
            header=Date=Tue, 27 Apr 2021 08:50:36 GMT
            status=200

==============================================================

Rest Service 容器日志

yaml
zeka-stack:
	rest:
		enable-container-log: true
	logging:
		level:
			project: trace

输出的日志内容同 Agent Service 容器日志.

关闭容器日志直接修改日志等级为非 trace 即可, enable-container-log 只会在启动时生效, 运行中修改此配置无效.

贡献者

暂无相关贡献者

页面历史

暂无最近变更历史

基于 VitePress 构建

👥本站访客数--人次·👀本站总访问量--