日志框架Slf4j和Logback的使用说明

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/endlessseaofcrow/article/details/83216389

1.什么是日志框架

  • 是一套能实现日志输出的工具包
  • 能够描述系统运行状态的所有时间可以算作日志
    • 用户下线
    • 接口超时
    • 数据库崩溃

2.日志框架的能力

  • 定制输出目标
    • 可以以文件的形式储存在固定的地方
    • 日志文件的滚动策略,如一天一个数据文件等
    • 日志存到数据库等要求
  • 定制输出格式,方便后期加工和处理
  • 携带上下文信息
  • 运行时选择性输出,不同情况下输出的内容不同
  • 灵活的配置
  • 优异的性能

3.常见的日志框架

日志门面 日志实现
Apache :JCL Log4j
SLF4j Log4j2
jboss-logging Logback
Java:JUL

最优框架:SLF4j+Logback

4.日志框架的使用

4.1Slf4j的使用

1.基本使用

  • 首先基于SpringBoot搭建框架,然后书写测试类

    @RunWith(SpringRunner.class)
    @SpringBootTest
    public class LoggerTest {
        //选择slf4j下的类,同时填写当前类的类名,这样打印出来的日志也是当前类的全包名。
        //当然也可以设置其他的类名,那么就会打印出设置的类名
        private final Logger logger=LoggerFactory.getLogger(LoggerTest.class);
    
        @Test
        public void test1(){
            logger.debug("--debug--");
            logger.info("--info--");
            logger.error("--error--");
        }
    }
    

    打印后查看控制台信息,日志是当前类的全包名

    2018-10-20 16:46:21.391  INFO 23112 --- [           main] com.antfin.sell.LoggerTest               : --info--
    2018-10-20 16:46:21.391 ERROR 23112 --- [           main] com.antfin.sell.LoggerTest               : --error--
    
    

    这是因为默认的日志级别是info,小于info级别的日志不会打印。

    可以查看org.slf4j.event查看日志级别

     ERROR, 
     WAR, 
     INFO,
     DEBUG, 
     TRACE;
    

2.使用lombok工具

  • 改进日志类,每次都需要写入当前类比较麻烦,可以使用lombok插件来简化

    • 添加依赖
    <dependency>
    	<groupId>org.projectlombok</groupId>
    	<artifactId>lombok</artifactId>
    </dependency>
    
    • 使用注释Slf4j,变量名称直接为log
    @RunWith(SpringRunner.class)
    @SpringBootTest
    //lombok.extern.slf4j.Slf4j;
    @Slf4j 
    public class LoggerTest2 {
    
        @Test
        public void test1(){
            log.debug("--debug--");
            log.info("--info--");
            log.error("--error--");
        }
    }
    

    注意:如果找不到log变量,那么添加idea需要添加插件Lombok Plugin,再重启即可。

3.日志中打印出变量

  • 使用占位符{}
String name="imooc";
String pass="123456";
log.info("name:{},pass:{}",name,pass);

4.2Logback的配置

  • application.yml 比较简单。只能配置路径和输出格式等简单的操作。
  • logback-spring.xml 比较复杂,但是相应的功能也比较强大。

4.2.1 需求出发

  • 区分info和error日志
  • 每天产生一个日志文件

4.2.2 application.yml

logging:
  pattern:
    console: "%d - %msg%n"
  #path: F:\logs\springboot
  file: F:\logs\springboot\sell.log
  level:
     com:  debug

具体的可以根据注释看到:

  • path和file都是指定路径的,但是file可以指定文件名
  • 对于指定级别 指定范围可以指定类,也可以说是包名。或者直接是root

4.2.3 logback-spring.xml

  • logback-spring.xml位于resources目录下
1.基本版

注意格式要正确,因为没有提示要小心出错。

<?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>
    <!--范围和级别 root整个项目都适用-->
    <root level="info">
        <appender-ref ref="consoleLog"/>
    </root>
</configuration>
2.配置到输出文件,且每天产生一个日志文件
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
    <!--输出文件的配置-->
    <appender name="fileInfoLog" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <encoder>
            <pattern>
                %msg%n
            </pattern>
        </encoder>
        <!--滚动策略-->
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <!--路径-->
            <fileNamePattern>F:\logs\sell\info.%d.log</fileNamePattern>
        </rollingPolicy>
    </appender>
    <!--范围和级别 root整个项目都适用-->
    <root level="info">
        <appender-ref ref="fileInfoLog"/>
    </root>
</configuration>
3.区分info和error日志
  • 对于error的日志只需要在其节点内加入<filter></filter>进行过滤即可,意思是只拦截Error及以上级别的日志,所以只想保留INFO是不可以的

    <!--根据范围来过滤-->
    <filter class="ch.qos.logback.classic.filter.ThresholdFilter">
    	<level>ERROR</level>
    </filter>
    
  • 对于info的日志也使用标签<filter></filter>,但使用另外一个类LevelFilter,点击该类可以看到有三个DENY\NEUTRAL\ACCEPT 操作。如果选择ACCEPT,则 则使用该条规则,选择NEUTRAL则忽略该条规则。

    <!--根据范围来过滤-->
    <filter class="ch.qos.logback.classic.filter.LevelFilter">
        <level>ERROR</level>
        <!--符合级别就过滤掉-->
        <onMatch>DENY</onMatch>
        <!--符合就接受-->
        <onMismatch>ACCEPT</onMismatch>
    </filter>
    
  • 完整的日志配置规则

<?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>

    <!--输出文件的配置  INFO-->
    <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>F:\logs\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>F:\logs\sell\error.%d.log</fileNamePattern>
        </rollingPolicy>
    </appender>
    <!--范围和级别 root整个项目都适用-->
    <root level="info">
        <appender-ref ref="consoleLog"/>
        <appender-ref ref="fileInfoLog"/>
        <appender-ref ref="fileErrorLog"/>
    </root>
</configuration>

5.进阶

logback的使用和logback.xml详解

猜你喜欢

转载自blog.csdn.net/endlessseaofcrow/article/details/83216389