以下配置基于spring整合logback、slf4j,每天生成两个日志文件(info级别和error及以上级别),控制台日志级别为info。
maven中的配置
<!--jcl-over-slf4j是用来把Spring源代码中大量使用到的commons-logging替换成slf4j,
只有在添加了这个依赖之后才能看到Spring框架本身打印的日志,否则只能看到开发者自己打印的日志-->
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>jcl-over-slf4j</artifactId>
<version>1.7.25</version>
</dependency>
<!--@Slf4j等注解-->
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.18.8</version>
</dependency>
<!--logback-ext-spring是由官方提供的对Spring的支持,它的作用就相当于log4j中的Log4jConfigListener-->
<dependency>
<groupId>org.logback-extensions</groupId>
<artifactId>logback-ext-spring</artifactId>
<version>0.1.4</version>
</dependency>
<!--logback-classic包含了logback本身所需的slf4j-api.jar、logback-core.jar及logback-classsic.jar-->
<dependency>
<groupId>ch.qos.logback</groupId>
<artifactId>logback-classic</artifactId>
<version>1.2.3</version>
</dependency>
logback.xml
<?xml version="1.0" encoding="UTF-8" ?>
<configuration>
<!--配置项appernder(控制台输出)-->
<appender name="console" class="ch.qos.logback.core.ConsoleAppender">
<encoder>
<!--日志打印格式:%d=时间;%t=线程名;%-5p=日志级别输出左对齐;%c=方法名;%m=消息;%n=换行-->
<pattern>%d [%t] %highlight(%-5p) [%c] - %m%n</pattern>
</encoder>
</appender>
<!--只输出info级别的可能-->
<appender name="fileInfoLog" class="ch.qos.logback.core.rolling.RollingFileAppender">
<filter class="ch.qos.logback.classic.filter.LevelFilter">
<level>INFO</level>
<onMatch>ACCEPT</onMatch><!--命中就应用-->
<onMismatch>DENY</onMismatch><!--不中就忽略-->
</filter>
<encoder>
<pattern>%d [%t] %-5p [%c] - %m%n</pattern>
</encoder>
<!--每天生成一个日志-->
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<!--设置路径-->
<fileNamePattern>journal/jquery_ajax/logs/info.%d.log</fileNamePattern>
</rollingPolicy>
</appender>
<!--error级别的日志,只输出error及以上等级-->
<appender name="fileErrorLog" class="ch.qos.logback.core.rolling.RollingFileAppender">
<filter class="ch.qos.logback.classic.filter.ThresholdFilter">
<level>error</level>
</filter>
<encoder>
<pattern>%d [%t] %-5p [%c] - %m%n</pattern>
</encoder>
<!--每天生成一个日志-->
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<!--设置日志的路径-->
<fileNamePattern>journal/jquery_ajax/logs/error.%d.log</fileNamePattern>
</rollingPolicy>
</appender>
<!-- 日志输出级别 -->
<root level="info">
<appender-ref ref="console"/>
<appender-ref ref="fileInfoLog"/>
<appender-ref ref="fileErrorLog"/>
</root>
</configuration>
web.xml(在web.xml中配置一个listener.同时配置一个上下文参数,用于指定logback.xml配置文件的路径)
<context-param>
<param-name>logbackConfigLocation</param-name>
<param-value>classpath:logback.xml</param-value>
</context-param>
<!--LogbackConfigListener由前述的logback-ext-spring依赖提供,若不依赖它则找不到这个listener类-->
<listener>
<listener-class>ch.qos.logback.ext.spring.web.LogbackConfigListener</listener-class>
</listener>
以上配置之后,便整合完毕!
接着测试一下配置是否生效。
基于spring项目,在测试类中做以下日志级别输出。(一般我们自定义异常类,异常类中log.error("程序发生错误",e);)
@Slf4j
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations={"classpath:applicationContext.xml"})
@WebAppConfiguration
public class UserControllerTest {
@Test
public void sys(){
log.trace("trace测试{}","嘻嘻");
log.debug("debug测试{}","哈哈哈哈");
log.info("info测试{}","hahaha");
log.warn("warn测试{}","wowowo");
log.error("error测试{}","xixixixi");
}
}
得到结果如下:
----------------------------------------------------------------------------------------------------------------
Spring Boot 的话,不用导包(spring-boot-starter默认导入了),也不用配置web.xml(因为没有这个文件)。
将logback.xml文件名改为logback-spring.xml就可以。
补充:
如果需要查看mybatis的SQL信息,需要把级别改为debug。
有两种方式:
1、把全局的日志级别设为info,然后把打印SQL相关的日志级别改为debug
<logger name="druid.sql" level="debug"/>
<logger name="com.xcj.batchdemo" level="debug"/>
<!-- 日志输出级别 -->
<root level="info">
<appender-ref ref="console"/>
<appender-ref ref="fileInfoLog"/>
<appender-ref ref="fileErrorLog"/>
</root>
2、将全局的日志级别设置为debug,然后将需要屏蔽的框架日志级别设置为info
<logger name="org.springframework" level="INFO" />
<logger name="org.hibernate" level="INFO" />
<logger name="org.apache.ibatis" level="INFO" />
<!-- 控制台日志输出级别 -->
<root level="debug">
<appender-ref ref="console"/>
<appender-ref ref="fileInfoLog"/>
<appender-ref ref="fileErrorLog"/>
</root>
以上就是我对spring整合logback+slf4j的总结,谢谢。