学java日志框架,看这一篇就够了!!!

  • 什么是日志框架

  • 日志框架的选择

  • Logback的使用与配置

什么是日志框架

  • 是一套能实现日志输出的工具包
  • 能够描述系统运行状态的所有时间都可以算作日志

在这里插入图片描述

日志框架的能力

  • 定制输出目标

  • 定制输出格式

  • 携带上下文信息

  • 运行时选择性输出

  • 灵活的配置

  • 优秀的性能

常见的日常框架

一般都有一个日志门面和一个日志实现,具体各类如下:

在这里插入图片描述

这么多日志框架,我们应该使用哪一个好呢?

我们用排除法,一个一个来

JUL:来自官方,实现过于简陋,经常被吐槽

jboss-logging:诞生就不是为了服务大众

SLF4J、log4j、Logback都是同一个人ceki写的。

在这里插入图片描述

为什么写三个呢?

那是因为ceki先写了log4j,但后面觉得log4j太烂了,他已经不想改了。

所以后面写了logback。

log4j2呢,从设计上来说很优秀,但太优秀了,太先进了,很多开源框架对其支持有限。(log4j2性能优于logback,但为了有高性能,设计得过于复杂,没必要,用logback就够了)

在这里插入图片描述

现在到了SLF4J和JCL的选择了。

SLF4J和logback是同一个作者写的,所以兼容性更好!!所以选择SLF4J不选JCL.

下面来一个测试案例:

package com.lbl;

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;

/**
 * Created by 廖师兄
 * 2017-06-02 17:44
 */
@RunWith(SpringRunner.class)
@SpringBootTest
@Slf4j
public class LoggerTest {
    
    

    @Test
    public void test1() {
    
    
        log.debug("debug...");
        log.error("error...");
        log.warn("warn...");
    }
}

运行结果:

在这里插入图片描述

有人可以会有两人问题:

  1. 为什么可以不用定义log变量,就可以直接使用log.debug("debug...");而不报错
  2. 明明写了3条语句,为什么只输出了两条呢?

问题一的解释:

在这里插入图片描述

问题二的解释:

首先,我们来看一下slog4j的源码:

在这里插入图片描述

在这里插入图片描述

可以看到有5个级别,而默认是info级别的。也就是说默认只会输出权值比info大的日志级别(包括info级别)

简单说,就是默认会输出info、warn、error这三个级别的日志。

说到这里,可能大家会发现了,如果是info级别,那么比info级别更高级别的日志,也会输出。

在日志输出的时候加入参数:

在这里插入图片描述

运行结果如下:

在这里插入图片描述

logback的配置

有两种配置方法:

  • application.yml
  • logback-spring.xml

需求:

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

1. 日志控制台输出格式

修改console参数console: "%d - %msg%n"

还是上面的代码,没有做任何配置(其实前面的图片是已经配置过了的,我现在把配置都删除),运行图:

在这里插入图片描述

第一种方法:配置application.yml

在这里插入图片描述

配置完后的运行效果:(明显,少了很多东西)

在这里插入图片描述

将日志保存到本地

配置path参数的目录path: F:/project/sell/logTest

如图:
在这里插入图片描述

再次运行上面的测试方法后,在logTest文件夹多了个spring.log的日志文件

在这里插入图片描述

打开看,可以看到是比较完整的日志格式。

在这里插入图片描述

改日志文件名称

设置file参数file: /var/log/tomcat/sell.log

如下图所示配置

在这里插入图片描述

运行效果:
在这里插入图片描述

修改日志级别

修改level参数level: debug

在这里插入图片描述

默认info级别的springboot启动时如图:

在这里插入图片描述

配置整个项目为debug级别之后:

在这里插入图片描述

运行效果:

在这里插入图片描述

将root修改为debug之后,启动时,debug会输出很多文字,明显发现项目的启动速度都变慢了

具体到类的日志级别修改:

在这里插入图片描述

运行效果:

在这里插入图片描述

第二种使用logback-spring.xml配置文件配置,具体分析请看下一篇

一般都是用这第二种方法,使用logback-spring.xml文件,这种文件一般直接拷过来用就可以了。

修改一下路径,到指定路径就ok

<?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>F:/project/sell/log/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:/project/sell/log/error.%d.log</fileNamePattern>
        </rollingPolicy>
    </appender>

    <root level="info">
        <appender-ref ref="consoleLog" />
        <appender-ref ref="fileInfoLog" />
        <appender-ref ref="fileErrorLog" />
    </root>

</configuration>

猜你喜欢

转载自blog.csdn.net/qq_37924905/article/details/108968704