日志管理
springboot默认日志框架是Logback,并用INFO级别输出到控制台
级别分别是TRACE,DEBUG,INFO,WARN,ERROR,FATAL,OFF
如:
- root日志配置
logging.level.root=error
- org.springframework.web日志配置
logging.level.org.springframework.web=debug
- hibernate日志配置
logging.level.org.hibernate=debug
配置日志输出文件logging.file或logging.path属性
- logging.file,设置文件,绝对路径或相对路径
如logging.file=log/info.log 就是项目下的log/info.log文件 - logging.path,设置目录,会在该目录下创建spring.log文件,并写入log
不能同时使用,若都配置logging.file生效,默认情况下,日志文件的大小达到10MB会切分一次,产生新的日志文件
,默认级别为ERROR,WARN,INFO
logging.level.root=warn
logging.level.org.springframework.web=debug
logging.file=log/info.log
logging.pattern.console=%d{yyyy/MM/dd-HH:mm:ss} %magenta([%thread]) %clr(%-5level) %logger- %msg%n
logging.pattern.file=%d{yyyy/MM/dd-HH:mm:ss} %magenta([%thread]) %clr(%-5level) %logger- %msg%n
- %d{yyyy/MM/dd-HH:mm:ss} %clr(%-5level) [%magenta(%-15thread)] %cyan(%logger{60}(%line)): %msg%n
- %d:日期,大括号里面为日期的显示格式;
- %clr(): 根据内容显示不同颜色的的方法,一般是给“日志级别”这个信息使用的;
- %level:日志级别,百分号和关键字中间的短杠和数字(-5)表示显示这么多个字符的宽度,内容不足则补充空格占位;
- %magenta():将内容显示为品红色字体
- %-5level——日志级别,并且使用5个字符靠左对齐
- %thread:线程名;
- %cyan:将内容显示为青色字体;
- %logger:事件发生的位置的所在类的全类名;
- %line:事件发生的位置的行号;
- %msg:事件信息;
%n:换行,输出跨操作系统的换行符号;
自定义日志配置文件
Spring Boot官方推荐优先使用带有-spring的文件名作为你的日志配置(如使用logback-spring.xml,而不是logback.xml),命名为logback-spring.xml的日志配置文件,spring boot可以为它添加一些spring boot特有的配置项
创建logback-spring.xml并放置到resource目录下
若起其它名字,如conf,可配置:logging.config=classpath:conf.xml
<?xml version="1.0" encoding="UTF-8"?>
<configuration scan="true" scanPeriod="60 seconds" debug="false">
<!--property用于配置变量,可通过${LOG_PATH} 取对应的值-->
<!--定义日志文件的存储地址 勿在 LogBack 的配置中使用相对路径-->
<property name="LOG_PATH" value="log"/>
<property name="PATTERN"
value="%d{yyyy-MM-dd} === [%thread] === %-5level === %logger{50} ==== %msg%n"/>
<property name="CONSOLE_LOG_PATTERN"
value="%date{yyyy-MM-dd HH:mm:ss} | %highlight(%5p) | %green(%thread) | %boldMagenta(%logger) | %cyan(%msg%n)"/>
<!--设置上下文名称-->
<!-- 可以通过%contextName来打印日志上下文名称,随便起,一般来说我们不用这个属性,可有可无-->
<contextName>logback</contextName>
<!--输出到控制台,一个appender定义一种输出策略,可以定义多个-->
<appender name="console" class="ch.qos.logback.core.ConsoleAppender">
<!--filter中定义要输出的日志级别,例如:输出info级别以上的日志,默认是info-->
<filter class="ch.qos.logback.classic.filter.ThresholdFilter">
<level>info</level>
</filter>
<!--日志输出编码格式化-->
<encoder>
<pattern>${CONSOLE_LOG_PATTERN}</pattern>
<charset>UTF-8</charset>
</encoder>
</appender>
<!-- 输出到文件info,日期滚动记录 -->
<appender name="logInfoFile"
class="ch.qos.logback.core.rolling.RollingFileAppender">
<!--<Prudent>true</Prudent>-->
<filter class="ch.qos.logback.classic.filter.LevelFilter">
<!--过滤 其他只留info-->
<level>info</level>
<!--匹配到就禁止-->
<onMatch>ACCEPT</onMatch>
<!--没有匹配到就允许-->
<onMismatch>DENY</onMismatch>
</filter>
<!--滚动策略,按照时间滚动 TimeBasedRollingPolicy 每天会生成一个日志文件-->
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<!--文件路径,定义了日志的切分方式,以防止日志填满整个磁盘空间-->
<fileNamePattern>
${LOG_PATH}/info/iot-info-%d{yyyy-MM-dd}.log
</fileNamePattern>
<!--只保留最近90天的日志-->
<maxHistory>90</maxHistory>
<!--用来指定日志文件的上限大小,那么到了这个值,就会删除旧的日志-->
<!--<totalSizeCap>1GB</totalSizeCap>-->
</rollingPolicy>
<append>true</append>
<!--日志输出编码格式化-->
<encoder>
<charset>GBK</charset>
<pattern>${PATTERN}</pattern>
</encoder>
</appender>
<!--把上边的两种种输出策略添加到跟节点,名称要保证和上边一致,否则报错 ,并指明输出级别为INFO-->
<root level="info">
<appender-ref ref="console"/>
<appender-ref ref="logInfoFile"/>
</root>
<!--可选节点,用来具体指明包的日志输出级别 如果不设置,则会交个root配置的appender处理-->
<!--将该包下的日志交给console的appender处理,additivity设为false表示不再向上传递,如果置为true,则root接到后会再打印一次。 -->
<logger name="com.iot.mqtt.controller" level="INFO" additivity="false">
<appender-ref ref="console"/>
</logger>
</configuration>