Appearance
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 和 spanIdINFO日志等级,固定5个字符1PID,不存在则为----分隔符[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方可输出javaRES的最大字符长度为: 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.logdebug日志ServerMethod.INFO.loginfo日志ServerMethod.WARN.logwarn日志ServerMethod.ERROR.logerror日志
日志归档
以上两种日志文件中,非当前日期的日志文件会在文件名中加上日期后缀以示区分.
ServerMethod.2021-01-01.gz 或 ServerMethod.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.xml 和 logback-spring-level.xml ,避免内置规则失效。