Spring Boot的日志配置
1,简介
日志的级别:
从低到高
TRACE<DEBUG<INFO<WARN<ERROR<FATAL
如果设置位WARN 这,则低于WARN的不能输出
java web下有好几种日志框架:如logback,log4j,log4j2(slf4j并不是一种日志框架,它相当于定义了规范、标准、接口,实现这个规范的日志框架就能用slf4j调用)
log4j
是个很久的日志框架,目前springboot 1.3.x 一下版本才支持log4j, 以上版本都支持的 log4j2
2,实现
1)Spring Boot中使用log4j的配置
先去掉自带的logging
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
<exclusions>
<exclusion>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-logging</artifactId>
</exclusion>
</exclusions>
</dependency>
再添加log4j的包
<dependency>
<groupId>commons-logging</groupId>
<artifactId>commons-logging</artifactId>
</dependency>
<dependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
</dependency>
在resources中新建log4j.properties 文件
在需要输出日志的类中添加
private static Logger logger = Logger.getLogger(HelloController.class);
logger.info("日志信息");
2)Spring Boot中使用log4j2的配置
先去掉自带的logging
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
<exclusions>
<exclusion>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-logging</artifactId>
</exclusion>
</exclusions>
</dependency>
引入log4j2的包
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-log4j2</artifactId>
</dependency>
在resources中新建log4j2.xml 文件
编写log4j2.xml文件->这里不做编写了
在配置文件中指定log4j2的位置
logging.config=classpath:log4j2.xml
使用
private static Logger logger = LogManager.getLogger(HelloController.class);
logger.info("日志信息");
3)Spring Boot中使用logback的配置
springboot是自带logback的,可直接使用
先配置logback-spring.xml文件
<?xml version="1.0" encoding="UTF-8"?>
<!-- 日志级别从低到高分为TRACE < DEBUG < INFO < WARN < ERROR < FATAL,如果设置为WARN,则低于WARN的信息都不会输出 -->
<!-- scan:当此属性设置为true时,配置文件如果发生改变,将会被重新加载,默认值为true -->
<!-- scanPeriod:设置监测配置文件是否有修改的时间间隔,如果没有给出时间单位,默认单位是毫秒。当scan为true时,此属性生效。默认的时间间隔为1分钟。 -->
<!-- debug:当此属性设置为true时,将打印出logback内部日志信息,实时查看logback运行状态。默认值为false。 -->
<configuration scan="true" scanPeriod="10 seconds">
<!--<include resource="org/springframework/boot/logging/logback/base.xml"
/> -->
<contextName>Logback For Boss</contextName>
<!-- name的值是变量的名称,value的值时变量定义的值。通过定义的值会被插入到logger上下文中。定义变量后,可以使“${}”来使用变量。 -->
<property name="log.path" value="F:/locakback" />
<!-- 定义日志文件 输入位置 -->
<property name="logDir" value="F:/locakback/logbak" />
<!-- 控制台输出日志 -->
<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
<encoder>
<!--格式化输出:%d表示日期,%thread表示线程名,%-5level:级别从左显示5个字符宽度,%line:行号,%msg:日志消息,%n是换行符-->
<pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n</pattern>
<charset>UTF-8</charset>
</encoder>
</appender>
<!--输出到文件-->
<!-- 时间滚动日志到文件 -->
<appender name="LOGFILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
<!-- 正在记录的日志文件的路径及文件名 -->
<file>${logDir}/system.log</file>
<!--日志文件输出格式-->
<encoder>
<pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n</pattern>
<charset>UTF-8</charset>
</encoder>
<!-- 日志记录器的滚动策略,按日期,按大小记录
1,先按日期记录日志,日期变化后,将前一天的日志文件重命名为xxxx%日期%索引
2,如果日期没有变化,但是文件大小超过指定的size后,对文件进行分割重命名
-->
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<!-- 日志归档 -->
<fileNamePattern>${logDir}/system.%d.%i.log</fileNamePattern>
<timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
<maxFileSize>10MB</maxFileSize>
</timeBasedFileNamingAndTriggeringPolicy>
<!--日志文件保留天数-->
<maxHistory>30</maxHistory>
</rollingPolicy>
</appender>
<!-- 日志级别-->
<root level="INFO">
<!-- 控制台输出 -->
<appender-ref ref="STDOUT" />
<!-- 文件输出 -->
<appender-ref ref="LOGFILE" />
</root>
<!-- sql日志输出-->
<logger name="druid.sql.Statement" level="INFO">
<appender-ref ref="STDOUT" />
</logger>
</configuration>
在application中配置
logging
config: classpath:logback-spring.xml
具体使用如下
private final static Logger logger = LoggerFactory.getLogger(HelloController.class);
logger.info("日志信息");
也可用
slf4j
可以输出日志
SLF4J是简单的日志外观模式框架,抽象了各种日志框架例如Logback、Log4j、Commons-logging和JDK自带的logging实现接口。它使得用户可以在部署时使用自己想要的日志框架。SLF4J是轻量级的,在性能方面几乎是零消耗的。
SLF4J没有替代任何日志框架,它仅仅是标准日志框架的外观模式。如果在类路径下除了SLF4J再没有任何日志框架,那么默认状态是在控制台输出日志。
引入了lombok就可以使用@slf4j
用法:
类上加 @slf4j
方法中直接log.info("日志信息");