Skip to content
本页导航

Log 日志

前提

基于现有业务场景,提供清晰的日志打印,清楚的对程序运行情况进行记录和监控,详细的了解程序内部的运行状态,同时对系统性能的影响将至最低。

目前的日志规范针对于Java语言,标准的日志输出已内置于 spring-cloud-investoday-starter

application配置

详情配置已在主页文档中说明

格式

整段日志由 标准日志业务日志 两部分构成,示例日志如下。

标准日志

表达式

xml
<property name="CONSOLE_LOG_PATTERN" value="%clr(%d{${yyyy-MM-dd HH:mm:ss.SSS}}){faint} %clr(%5p) [${traceId},${spanId}] %clr(${PID:- }){magenta} %clr(---){faint} %clr([%15.15t]){faint} %clr(%-40.40logger{39}){cyan} %clr(:){faint} %m%n${LOG_EXCEPTION_CONVERSION_WORD:-%wEx}"/>
<property name="CONSOLE_LOG_PATTERN" value="%clr(%d{${yyyy-MM-dd HH:mm:ss.SSS}}){faint} %clr(%5p) [${traceId},${spanId}] %clr(${PID:- }){magenta} %clr(---){faint} %clr([%15.15t]){faint} %clr(%-40.40logger{39}){cyan} %clr(:){faint} %m%n${LOG_EXCEPTION_CONVERSION_WORD:-%wEx}"/>

示例

java
2023-06-15 16:29:44,018  INFO [c7e85f2e82df959e,c7e85f2e82df959e] 44447 --- [nio-8085-exec-8] c.i.b.a.filter.ControllerResponseFilter  : 16:29:34.364 0:0:0:0:0:0:0:1 GET -> /t2/swagger/test123 {name=12, num=3} Res:{"ApiSpecVersion":"V2019","Data":""} (1ms) [9651ms]
2023-06-15 16:29:44,018  INFO [c7e85f2e82df959e,c7e85f2e82df959e] 44447 --- [nio-8085-exec-8] c.i.b.a.filter.ControllerResponseFilter  : 16:29:34.364 0:0:0:0:0:0:0:1 GET -> /t2/swagger/test123 {name=12, num=3} Res:{"ApiSpecVersion":"V2019","Data":""} (1ms) [9651ms]
  • 2021-11-04 10:07:44.596 日期,格式为 yyyy-MM-dd HH:mm:ss.SSS
  • [c7e85f2e82df959e,c7e85f2e82df959e] 链路跟踪的 traceId 和 spanId
  • INFO 日志等级,固定5个字符
  • 1 PID,不存在则为 -
  • --- 分隔符
  • [nio-9522-exec-5] 产生日志的线程名
  • c.i.b.filtter.ControllerResponseFilter 输出日志的logger名,根据长度会缩短
  • : 冒号,和业务日志隔开
  • xxxx 其他部分为业务日志输出,详情见下方的业务日志

业务日志

Request 请求

如果项目中已接入common-invest包,此包已针对标准的请求进行了统一日志输出,具体详情如下:

Pre 前置请求

请求从外部进入Filter后,不经过任何代码处理的原始请求输出。

注意:此输出需要在application.properties中配置 aix.web.pre-log.enabled=true 方可生效

java
通用格式 : 0:0:0:0:0:0:0:1 POST -> [PRE] /test2/entitys {NameT=123, json={  "Apitest": "string",  "ToTest": "string",  "ToTest2": "string"}}
通用格式 : 0:0:0:0:0:0:0:1 POST -> [PRE] /test2/entitys {NameT=123, json={  "Apitest": "string",  "ToTest": "string",  "ToTest2": "string"}}
  • 0:0:0:0:0:0:0:1 请求IP地址
  • POST 请求方式
  • -> [PRE] 前置请求标识符
  • /test2/1/t2 请求的path
  • {Name=123} 请求参数, 其中json为body参数
后置请求

请求从外部进入Filter后,执行请求参数转换 -> 业务方法执行 -> 返回值格式化等处理后才会输出。此规则为默认请求输出

java
通用格式 : 14:35:31.291 0:0:0:0:0:0:0:1 POST -> /test2/entitys {NameT=123, json={  "Apitest": "string",  "ToTest": "string",  "ToTest2": "string"}} RES:{"Data":[{"ToTest":"123","ToTest2":"456","Apitest":null},{"ToTest":"123","ToTest2":"456","Apitest":null}],"TotalCount":2,"Pages":0,"Page":0,"PageSize":0,"HasNextPage":false,"NextPage":0,"LastPage":false,"RequestId":null} (0ms) [1ms]
通用格式 : 14:35:31.291 0:0:0:0:0:0:0:1 POST -> /test2/entitys {NameT=123, json={  "Apitest": "string",  "ToTest": "string",  "ToTest2": "string"}} RES:{"Data":[{"ToTest":"123","ToTest2":"456","Apitest":null},{"ToTest":"123","ToTest2":"456","Apitest":null}],"TotalCount":2,"Pages":0,"Page":0,"PageSize":0,"HasNextPage":false,"NextPage":0,"LastPage":false,"RequestId":null} (0ms) [1ms]
  • 14:35:31.291 请求时间,前置请求开始时间

  • 0:0:0:0:0:0:0:1 请求IP地址

  • POST 请求方式

  • -> [PRE] 后置请求标识符

  • /test2/1/t2 请求的path

  • {Name=123} 请求参数, 其中json为body参数

  • RES:*** 响应数据,此输出需要在 application.properties 中配置 aix.web.response.output.enabled=true方可输出

    java
    RES的最大字符长度为: 1024,可以使用配置 `aix.web.response.output.max-size` 进行自定义
    RES的最大字符长度为: 1024,可以使用配置 `aix.web.response.output.max-size` 进行自定义
  • (0ms) 业务method执行时间(用于业务代码优化)

  • [1ms] common-invest对Respose处理耗费时间(用于common-invest优化)

其他业务日志

其他业务日志由开发者自定义

java
通用格式 : 其他业务日志
通用格式 : 其他业务日志

日志文件输出

目前框架提供了两种标准化日志格式,普通日志文件分级日志文件

普通日志文件

默认配置,日志文件输出至 ServerMethod.log

分级日志文件

application.properties中配置 logging.config=classpath:logback-spring-level.xml开启

开启后,日志文件会分等级输出到不同文件中:

  • ServerMethod.DEBUG.log debug日志
  • ServerMethod.INFO.log info日志
  • ServerMethod.WARN.log warn日志
  • ServerMethod.ERROR.log error日志
日志归档

以上两种日志文件中,非当前日期的日志文件会在文件名中加上日期后缀以示区分.

ServerMethod.2021-01-01.gzServerMethod.DEBUG.2021-01-01.gz

归档默认值:

fileMaxHistory: 30天

fileMaxSize: 100MB

fileCleanHistoryOnStart: false

fileTotalSizeCap: 0

自定义通用日志

在业务项目中resources文件夹中新建 logback-spring-XXX.xml 文件来新建日志格式,同时在 application.properties 中配置 logging.config=classpath:logback-spring-XXX.xml 即可。

注意: 新建配置文件时避免命名为 logback-spring.xmllogback-spring-level.xml ,避免内置规则失效。

代码示例可参考 普通文件日志分级文件日志

lhiro