java springboot 日志搭建

作为一个完整的项目首先必不可少的就是需要有日志,本文我们用springboot进行日志的搭建。

常见的日志框架根据门面和实现可分为两大类:

(1)日志门面:JCL、SLF4j、jboss-logging

(2)日志实现:Log4j、Log4j2、Logback、JUL

其中,SLF4j、Log4j、Logback出自于同一作者,为了保证良好的可用性和兼容性,我们使用SLF4j、Logback进行日志的搭建。

首先,建立一个LoggerTest类:

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 = "abc";
        String password = "123456";
        log.debug("debug...");
        log.info("name: {}, password: {}", name, password);//占位符写法
        log.error("error...");
        log.warn("warn...");
    }
}

其中,注解@Slf4j要引入maven包:

<dependency>
    <groupId>org.projectlombok</groupId>
    <artifactId>lombok</artifactId>
</dependency>

以上为日志的门面,其决定所输出的日志。下面将关于日志的实现,就是如何选择日志打印到文件或者控制台中。

有关Logback的配置,有两种方式:

(1)在配置文件application中设置

(2)在logback-spring.xml中设置

这两种方式,第一种通常可修改的地方较少,比较简单;第二种可定制的地方较多,我们分别讨论。

在日志的通常要求上,一般应该满足:至少要区分info和error日志,然后至少保证每天可以产生一个日志文件这两个方面。

首先来看第一种,我们选用application.properties文件设置日志:

logging.pattern.console=%d - %msg%n //设置控制台日志打印的格式
logging.file=E:/test.log  //设置日志存放的文件路径及文件名,可代替logging.path
logging.level.com.demo.rizhi.LoggerTest=debug //level后面是我的包名,此段代码是设置LoggerTest类日志的打印级别

如果想设置全部类的日志打印级别,可用

logging.pattern.level=debug

日志设置路径也可以采用不带文件名的形式,那这时日志会自己采用默认值,spring.log

logging.path=E:/

这里提到了一个日志级别的概念,我们稍后讲。

以上是第一种日志实现方式,可供选择的参数较少,一般来说更常用的是第二种方式。现在我们来讲第二种方式。

第二种方式是在resource文件夹下建立一个文件logback-spring.xml。

<?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">//设置文件info日志的格式
        <filter class="ch.qos.logback.classic.filter.LevelFilter">
            <level>ERROR</level>  //设置过滤器,ERROR级别及以上
            <onMatch>DENY</onMatch>  //如果匹配ERROR则否定
            <onMismatch>ACCEPT</onMismatch>  //如果不匹配则接收
        </filter>
        <encoder>
            <pattern>  //设置输出格式
                %msg%n
            </pattern>
        </encoder>
        <!--滚动策略-->
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <!--路径-->
            <fileNamePattern>E:/springbootweixinrizhi/sell/info.%d.log</fileNamePattern>
        </rollingPolicy>
    </appender>

    <appender name="fileErrorLog" class="ch.qos.logback.core.rolling.RollingFileAppender">//设置文件ERROR日志的格式
        <filter class="ch.qos.logback.classic.filter.ThresholdFilter">  //过滤器,打印ERROR级别以上的日志
            <level>ERROR</level>
        </filter>
        <encoder>
            <pattern>
                %msg%n
            </pattern>
        </encoder>
        <!--滚动策略-->
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <!--路径-->
            <fileNamePattern>E:/springbootweixinrizhi/sell/error.%d.log</fileNamePattern>
        </rollingPolicy>
    </appender>

    <root level="info">  //用到root下面,表示整个项目都适用,设置info级别
        <appender-ref ref="consoleLog" />
        <appender-ref ref="fileInfoLog" />
        <appender-ref ref="fileErrorLog" />
    </root>

</configuration>

在这里,我们讲一下日志的级别,在org.slf4j.event下,可以找到日志的级别分别有五个:

ERROR、WARN、INFO、DEBUG、TRACE。其优先级分别为40,30,20,10,0.

在第一种日志配置方式中,无论是设置具体类的日志打印级别,还是全部类的日志打印级别,后面跟的参数都是代表所打印日志的最低级别,上文用例是debug,也就是打印除TRACE外的日志都会打印在控制台上。

第二种日志配置方式则分为了两种:

(1)第一个ERROR日志打印方式,设置了level,是表示打印ERROR及其以上级别的日志,也就只有ERROR自己,符合只打印ERROR的日志要求

(2)第二个INFO日志的打印方式,设置了ERROR过滤器,如果匹配则不打印,不匹配则打印。

在INFO日志的打印方式中我们还看到了匹配指令有DENY、ACCEPT,实际上还有一个NEUTRAL。表示中立,即会先忽略其所在规则,然后往下走看是否被以下的规则所命中。

由以上两种日志搭建方式可见,第一种方式局限性较大,第二种可以满足ERROR和INFO分别按天数打印的特点。因此第二种方式更常用一些。因此推荐使用第二种方式。



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值