什么是日志框架
是一套能实现日志输出的工具包
能够描述系统运行状态的所以时间都可以算作日志 比如用户下线,接口超时,数据库SQL操作。
日志框架能力:
- 定制输出目标
- 定制输出格式
- 携带上下文信息
- 运行时选择性输出
- 灵活的配置
- 优异的性能
日志框架的选择
日志门面:JCL、SLF4J、jboos-logging
日志实现: log4j 、log4j2 、logback 、 JUL
使用
import org.junit.Test;
import org.junit.runner.RunWith;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.junit4.SpringRunner;
@RunWith(SpringRunner.class)
@SpringBootTest
public class LoggerTest {
private final static Logger loggger = LoggerFactory.getLogger(LoggerTest.class);
@Test
public void test1(){
loggger.info("info....");
loggger.debug("debug....");
loggger.error("error....");
}
}
引入lombok,可以让我们在日志的使用上更便捷,直接使用注解@Slf4j 不必在每个类创建一个日志对象; intelliJ 注解@SlF4J后找不到log解决方法:引入lombok的pom文件,在pulgins里面下载lombok插件;
import lombok.extern.slf4j.Slf4j;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.junit4.SpringRunner;
@RunWith(SpringRunner.class)
@SpringBootTest
@Slf4j
public class LoggerTest {
@Test
public void test1() {
String name = "xxxx";
String password = "123456";
log.debug("debug...");
log.info("name: " + name + " ,password: " + password);
log.info("name: {}, password: {}", name, password);
log.error("error...");
log.warn("warn...");
}
}
Logback的使用和配置
有2种,application.yml 或者logbook-spring.xml 比如我有下面的需求,区分error和info ,每天产生一个文件
logging:
pattern:
console: "%d - %msg%n"
path: /var/log/tomcat/
file: /var/log/tomcat/sell.log
level:
com.imooc.LoggerTest: debug
<?xml version="1.0" encoding="UTF-8" ?>
<configuration>
<appender name="consoleLog" class="ch.qos.logback.core.ConsoleAppender">
<layout class="ch.qos.logback.classic.PatternLayout">
<pattern>
%d - %msg%n
</pattern>
</layout>
</appender>
<appender name="fileInfoLog" class="ch.qos.logback.core.rolling.RollingFileAppender">
<filter class="ch.qos.logback.classic.filter.LevelFilter">
<level>ERROR</level>
<onMatch>DENY</onMatch>
<onMismatch>ACCEPT</onMismatch>
</filter>
<encoder>
<pattern>
%msg%n
</pattern>
</encoder>
<!--滚动策略-->
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<!--路径-->
<fileNamePattern>/var/log/tomcat/sell/info.%d.log</fileNamePattern>
</rollingPolicy>
</appender>
<appender name="fileErrorLog" class="ch.qos.logback.core.rolling.RollingFileAppender">
<filter class="ch.qos.logback.classic.filter.ThresholdFilter">
<level>ERROR</level>
</filter>
<encoder>
<pattern>
%msg%n
</pattern>
</encoder>
<!--滚动策略-->
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<!--路径-->
<fileNamePattern>/var/log/tomcat/sell/error.%d.log</fileNamePattern>
</rollingPolicy>
</appender>
<root level="info">
<appender-ref ref="consoleLog" />
<appender-ref ref="fileInfoLog" />
<appender-ref ref="fileErrorLog" />
</root>
</configuration>