spring-boot配置slf4j分区日志
一、说明:SLF4J,即简单日志门面(Simple Logging Facade for Java),不是具体的日志解决方案,它只服务于各种各样的日志系统。按照官方的说法,SLF4J 是一个用于日志系统的简单 Facade,允许最终用户在部署其应用时使用其所希望的日志系统。spring-boot内部已经集成了slf4j,所以我们只要对slf4j做下简单的配置即可。
二、配置:
1、首先我们需要一个文件用来做日志相关的配置:
<configuration>
<!-- 格式化输出:%date表示日期,%thread表示线程名,%-5level:级别从左显示5个字符宽度 %msg:日志消息,%n是换行符-->
<property name="LOG_PATTERN" value="%date{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n" />
<!-- 定义日志存储的路径,不要配置相对路径 -->
<property name="FILE_PATH" value="usr/logs/demo.%d{yyyy-MM-dd}.%i.log" />
<!-- 控制台输出日志 -->
<appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender">
<encoder>
<!-- 按照上面配置的LOG_PATTERN来打印日志 -->
<pattern>${LOG_PATTERN}</pattern>
</encoder>
</appender>
<!--每天生成一个日志文件,保存15天的日志文件。rollingFile是用来切分文件的 -->
<appender name="FILE"
class="ch.qos.logback.core.rolling.RollingFileAppender">
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<fileNamePattern>${FILE_PATH}</fileNamePattern>
<!-- keep 15 days' worth of history -->
<maxHistory>15</maxHistory>
<timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
<!-- 日志文件的最大大小,超过这个大小重新生成一个文件 -->
<maxFileSize>1MB</maxFileSize>
</timeBasedFileNamingAndTriggeringPolicy>
</rollingPolicy>
<encoder>
<pattern>${LOG_PATTERN}</pattern>
</encoder>
</appender>
<!-- project default level -->
<logger name="src" level="INFO" />
<!-- 日志输出级别 常用的日志级别按照从高到低依次为:ERROR、WARN、INFO、DEBUG。 -->
<root level="INFO">
<appender-ref ref="CONSOLE" />
<appender-ref ref="FILE" />
</root>
</configuration>
2、在application.properties文件中引入配置
logging.config=classpath:logback.xml
3、在需要的地方打上日志即可,如:
package com.demo.service.impl;
import com.demo.dao.UserDao;
import com.demo.dto.User;
import com.demo.service.UserService;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
@Service("userService")
public class UserServiceImpl implements UserService {
private static final Logger logger = LoggerFactory.getLogger(UserServiceImpl.class);
@Autowired
private UserDao userDao;
@Override
public void insert(User user) {
logger.warn("写入数据库");
userDao.insertUser(user);
}
}
4、测试:我把
可以看到超过10KB,重新生成文件了。
三、SLF4J打印SQL:
在application.properties中加入:
logging.level.dao所在的包=日志级别可以打印SQL日志,如我的:
server.port=9999
server.context-path=/quartzgroup
logging.config=classpath:logback.xml
#打印SQL日志
logging.level.com.demo.dao=debug
my.pool.url=jdbc:mysql://localhost:3306/quartzgroup?useUnicode=true&characterEncoding=utf8
my.pool.username = root
my.pool.password= wtyy
my.pool.driver-class-name = com.mysql.jdbc.Driver
my.pool.defaultAutoCommit = true
my.pool.maxWait=60000
my.pool.maxActive = 6
my.pool.maxIdle = 5
my.pool.minIdle = 2
my.pool.initialSize = 3
my.pool.validationQuery = SELECT 1
my.pool.testWhileIdle = true
my.pool.timeBetweenEvictionRunsMillis=60000
my.pool.minEvictableIdleTimeMillis=30000
my.pool.testOnBorrow=false
my.pool.testOnReturn=false
mybatis.mapper-locations=classpath*:Mapper/*Mapper.xml
日志如下:
也可以通过xml来配置日志输出地方、SQL日志等:
<configuration>
<property name="log.dir" value="/data/log/test"/>
<!--日志输出格式-->
<!--<property name="LOG_PATTERN" VALUE="" />-->
<!--控制台日志-->
<appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender">
<!--控制台最低日志级别 debug-->
<filter class="ch.qos.logback.classic.filter.ThresholdFilter">
<level>debug</level>
</filter>
<encoder>
<pattern>%date{yyyy-MM-dd HH:mm:ss} %highlight(%-5level) --- [%thread] %cyan((%file:%line\))- %msg%n</pattern>
<!-- 控制台也要使用utf-8,不要使用gbk -->
<charset>UTF-8</charset>
</encoder>
</appender>
<!-- RollingFileAppender:滚动记录文件,先将日志记录到指定文件,当符合某个条件时,将日志记录到其他文件 -->
<!-- 1.先按日期存日志,日期变了,将前一天的日志文件名重命名为xxx%日期%索引,新的日志仍然是sys.log -->
<!-- 2.如果日期没有变化,但是当前日志文件的大小超过1kb时,对当前日志进行分割 重名名 -->
<appender name="SYSLOG" class="ch.qos.logback.core.rolling.RollingFileAppender">
<File>${log.dir}/sys.log</File>
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<fileNamePattern>${log.dir}/sys.%d.%i.log</fileNamePattern>
<!-- 每产生一个日志文件,该日志文件的保存期限为30天 -->
<maxHistory>90</maxHistory>
<timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
<maxFileSize>500MB</maxFileSize>
</timeBasedFileNamingAndTriggeringPolicy>
</rollingPolicy>
<encoder>
<!-- pattern节点,用来设置日志的输入格式 -->
<pattern>%date{yyyy-MM-dd HH:mm:ss} %highlight(%-5level) --- [%thread] %cyan((%file:%line\))- %msg%n</pattern>
<!-- 记录日志的编码 -->
<charset>UTF-8</charset> <!-- 此处设置字符集 -->
</encoder>
</appender>
<!--SQL日志-->
<logger name="com.demo.mapper" level="DEBUG" additivity="false">
<appender-ref ref="SYSLOG" />
<appender-ref ref="CONSOLE" />
</logger>
<logger name="com.demo.permission.mapper" level="DEBUG" additivity="false">
<appender-ref ref="SYSLOG" />
<appender-ref ref="CONSOLE" />
</logger>
<!-- 控制台、文件日志输出级别 -->
<root level="info">
<appender-ref ref="CONSOLE" />
<appender-ref ref="SYSLOG" />
</root>
</configuration>
还没有评论,来说两句吧...