日志组件-配置说明
基础配置
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.path 和 zeka-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
zeka-stack:
logging:
level:
root: error
project: info
group:
test: sample.logsystem, sample1.logsystemroot 不是必须的, 推荐生产环境配置为 error (生产环境默认为 warn). project 是下面 group 的分组名, 详情见 zeka-stack.logging.group.
zeka-stack.logging.group
日志等级分组配置, 用于多个 package 下相同日志等级的简化配置.
zeka-stack:
logging:
level:
test: error
group:
test: sample1.aaa, sample2.bbb一个 test 组可以配置多个 package.
其他默认的 group 和默认等级:
// 内置的 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 容器日志等. 不过最好在需要排查问题时开启, 避免大量日志导致性能损耗.
网关日志
按照如下方式开启网关日志:
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
配置如下(全部为默认值, 如果没有特殊需求, 可不用配置):
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 容器日志
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 容器日志
zeka-stack:
rest:
enable-container-log: true
logging:
level:
project: trace输出的日志内容同 Agent Service 容器日志.
关闭容器日志直接修改日志等级为非 trace 即可, enable-container-log 只会在启动时生效, 运行中修改此配置无效.
