日志说明
在需要使用记录日志的java类上使用@Sl4j注解,就可以使用log.xx方法,记录日志了。示例如下:
@Slf4j
@Component
public class DemoDomainServiceFallbackFactory implements FallbackFactory<DemoDomainService> {
@Override
public DemoDomainService create(Throwable throwable) {
return new DemoDomainService() {
@Override
public PageResult<DemoDomain> list(Map<String, Object> params) {
log.error("通过翻页信息查询DemoDomain异常:{}", params, throwable);
使用指南
由于日志服务一般都在ApplicationContext创建前就初始化了,它并不是必须通过Spring的配置文件控制。因此通过系统属性和传统的Spring Boot外部配置文件依然可以很好的支持日志控制和管理。
1.1 默认日志 Logback:
默认情况下,Spring Boot会用Logback来记录日志,并用INFO级别输出到控制台。
日志输出内容元素具体如下:
时间日期:精确到毫秒
日志级别:ERROR, WARN, INFO, DEBUG or TRACE
进程ID
分隔符:— 标识实际日志的开始
线程名:方括号括起来(可能会截断控制台输出)
Logger名:通常使用源代码的类名
日志内容
1.2 控制台输出
日志级别从低到高分为:
TRACE < DEBUG < INFO < WARN < ERROR < FATAL。
1.3 文件及位置:logback-spring.xml
image.png1.4 元素结点
1.4.1 根节点<configuration>
包含的属性
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
...
</configuration>
scan:当此属性设置为true时,配置文件如果发生改变,将会被重新加载,默认值为true。
scanPeriod:设置监测配置文件是否有修改的时间间隔,如果没有给出时间单位,默认单位是毫秒。当scan为true时,此属性生效。默认的时间间隔为1分钟。
debug:当此属性设置为true时,将打印出logback内部日志信息,实时查看logback运行状态。默认值为false。
1.4.2 根节点<configuration>
的子节点
<configuration>
下面一共有2个属性,3个子节点,分别是:
﹡ 属性一:设置上下文名称<contextName>
<contextName>${APP_NAME}</contextName>
每个logger都关联到logger上下文,默认上下文名称为“default”。但可以使用设置成其他名字,用于区分不同应用程序的记录。一旦设置,不能修改,可以通过%contextName来打印日志上下文名称。
﹡ 属性二:设置变量<property>
<!-- 彩色日志格式 -->
<property name="CONSOLE_LOG_PATTERN" value="[${APP_NAME}:${ServerIP}:${ServerPort}] %clr(%d{yyyy-MM-dd HH:mm:ss.SSS}){faint} %clr(%level){blue} %clr(${PID}){magenta} %clr([%thread]){orange} %clr(%logger){cyan} %m%n${LOG_EXCEPTION_CONVERSION_WORD:-%wEx}" />
<property name="CONSOLE_LOG_PATTERN_NO_COLOR" value="[${APP_NAME}:${ServerIP}:${ServerPort}] %d{yyyy-MM-dd HH:mm:ss.SSS} %level ${PID} [%thread] %logger %m%n${LOG_EXCEPTION_CONVERSION_WORD:-%wEx}" />
通过<property>定义的值会被插入到logger上下文中。定义变量后,可以使“${}”来使用变量。
﹡ 子节点一<appender>
<!-- 控制台日志 -->
<appender name="StdoutAppender" class="ch.qos.logback.core.ConsoleAppender">
<withJansi>true</withJansi>
<encoder>
<pattern>${CONSOLE_LOG_PATTERN}</pattern>
<charset>UTF-8</charset>
</encoder>
</appender>
appender用来格式化日志输出节点,有俩个属性name和class,class用来指定哪种输出策略,常用就是控制台输出策略和文件输出策略。
控制台输出ConsoleAppender:
<!-- 控制台日志 -->
<appender name="StdoutAppender" class="ch.qos.logback.core.ConsoleAppender">
...
</appender>
输出到文件RollingFileAppender
另一种常见的日志输出到文件,随着应用的运行时间越来越长,日志也会增长的越来越多,将他们输出到同一个文件并非一个好办法。RollingFileAppender用于切分文件日志:
<!-- 按照每天生成常规日志文件 -->
<appender name="FileAppender" class="ch.qos.logback.core.rolling.RollingFileAppender">
<file>${LOG_FILE}/${APP_NAME}.log</file>
<encoder>
<pattern>${CONSOLE_LOG_PATTERN_NO_COLOR}</pattern>
<charset>UTF-8</charset>
</encoder>
<!-- 基于时间的分包策略 -->
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<fileNamePattern>${LOG_FILE}/${APP_NAME}.%d{yyyy-MM-dd}.%i.log</fileNamePattern>
<!--保留时间,单位:天-->
<maxHistory>${LOG_FILEMAXDAY}</maxHistory>
<timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
<maxFileSize>${LOG_MAXFILESIZE}</maxFileSize>
</timeBasedFileNamingAndTriggeringPolicy>
</rollingPolicy>
<filter class="ch.qos.logback.classic.filter.LevelFilter">
<level>INFO</level>
</filter>
</appender>
其中重要的是rollingPolicy的定义,上例中<fileNamePattern>
定义了日志的切分方式——把每一天的日志归档到一个文件中,<maxHistory>
表示只保留最近n天的日志,以防止日志填满整个磁盘空间。同理,可以使用%d{yyyy-MM-dd_HH-mm}来定义精确到分的日志切分方式。<totalSizeCap>
用来指定日志文件的上限大小,例如设定值,那么到了这个值,就会删除旧的日志。
<encoder>
表示对日志进行编码:
%d{HH: mm:ss.SSS}——日志输出时间
%thread——输出日志的进程名字,这在Web应用以及异步任务处理中很有用
%-5level——日志级别,并且使用5个字符靠左对齐
%logger{36}——日志输出者的名字
%msg——日志消息
%n——平台的换行符
﹡ 子节点二<root>
root节点是必选节点,用来指定最基础的日志输出级别,只有一个level属性。
level:用来设置打印级别,大小写无关:TRACE, DEBUG, INFO, WARN, ERROR, ALL 和 OFF,不能设置为INHERITED或者同义词NULL,默认是DEBUG。
<root>
可以包含零个或多个<appender-ref>
元素,标识这个appender将会添加到这个loger。
<root level="INFO">
<appender-ref ref="StdoutAppender"/>
<appender-ref ref="FileAppender"/>
</root>
﹡ 子节点三<loger>
`<loger>`用来设置某一个包或者具体的某一个类的日志打印级别、以及指定`<appender>`。`<loger>`仅有一个name属性,一个可选的level和一个可选的addtivity属性。
name:用来指定受此loger约束的某一个包或者具体的某一个类。
level:用来设置打印级别,大小写无关:TRACE, DEBUG, INFO, WARN, ERROR, ALL 和 OFF,还有一个特俗值INHERITED或者同义词NULL,代表强制执行上级的级别。如果未设置此属性,那么当前loger将会继承上级的级别。
addtivity:是否向上级loger传递打印信息。默认是true。
网友评论