什么是日志框架 是一套能实现日志输出的工具包 能够描述系统运行状态的所以时间都可以算作日志 比如用户下线,接口超时,数据库SQL操作。 日志框架能力: 定制输出目标 定制输出格式 携带上下文信
什么是日志框架
是一套能实现日志输出的工具包
能够描述系统运行状态的所以时间都可以算作日志 比如用户下线,接口超时,数据库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)@SpringBootTestpublic 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@Slf4jpublic 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>