Logback配置与运用

本文介绍了Logback在SpringBoot项目中的配置和使用,强调了日志的重要性,并讲解了日志级别、Slf4j使用、日志配置文件的构成、日志输出格式以及日志轮转策略,包括TimeBasedRollingPolicy和SizeAndTimeBasedRollingPolicy。通过配置,实现了启动日志和业务日志的分离,并设定业务日志基于文件尺寸和时间进行轮转。
摘要由CSDN通过智能技术生成

Logback配置与运用

每个项目都涉及到日志这个模块。存在的意义无非就是两个:

记录业务日志,方便后期排查问题
以日志上的形式记录业务数据,并将日志文件推送第三方
每次接手一个新项目,就会先问有没有配置日志,如果没有配置日志模块,那么排查问题就是一个很恼火的问题,不清楚请求参数是什么,走了哪个判断,调用第三方接口的参数和返回结果是什么,一切的问题都需要一步一步的调试且耗时耗力。自从意识到这个问题后,每次写代码都会加入日志,并将请求参数,返回结果,耗时的数据写入日志,方便后期排查问题。

目前接触比较多Java 开源框架是SpringBoot,默认的日志实现是LogBack,通过配置xml文件就可以输出日志。之前在配置LogBack时,总是无脑的将其他项目的配置复制过来,也不懂为什么要这样配置。通过这几天的学习,把自己对logback的日志记录如下。

基础知识
日志级别
日志输出级别从大高到低为:

OFF
FATAL
ERROR
WARN
INFO
DEBUG
TRACE
ALL
日常开发中常用的是:

ERROR:用于输出影响系统正常运行的信息
WARN:用于输出错误信息,但不影响系统正常运行
INFO:用于记录正常业务日志信息,方便后期的问题排查
DEBUG:用于开发环境下的信息输出
方法打印
推荐使用Slf4j记录日志,在LogBack不被允许的情况下可以方便的切换到其他日志系统。实例化logger对象:

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

public class XXX {
public static final Logger log = LoggerFactory.getLogger(XXX.class);
}
如果使用了lombok,则可以使用@Slf4j注解实例化logger对象

输出ERROR日志
log.error(“this is error log;time:{}”, System.currentTimeMillis());
输出WARN日志
log.warn(“this is warn log;time:{}”, System.currentTimeMillis());
输出INFO日志
log.info(“this is info log;time:{}”, System.currentTimeMillis());
输出DEBUG日志
if (log.isDebugEnabled()) {
log.debug(“this is debug log;time:{}”, System.currentTimeMillis());
}
在开发中,使用参数化日志而不是字符串拼接,可以调高代码可读性并提高性能,在记录debug日志时,先判断目前所处环境是否支持debug输出,因为 String 字符串的拼接会使用 StringBuilder 的 append()方式,有一定的性能损耗。使用占位符仅 是替换动作,可以有效提升性能。(摘自:阿里巴巴Java开发手册嵩山版)

日志规约
image

[Java开发手册(泰山版)]
image

image

Java开发手册(泰山版)

配置LogBack
在SpringBoot框架中使用LogBack只需在resources目录下添加配置文件即可,可以项目启动日志设置为debug查看其初始化步骤:

23:42:43,896 |-INFO in ch.qos.logback.classic.LoggerContext[heron] - Could NOT find resource [logback-test.xml]
23:42:43,897 |-INFO in ch.qos.logback.classic.LoggerContext[heron] - Could NOT find resource [logback.groovy]
23:42:43,897 |-INFO in ch.qos.logback.classic.LoggerContext[heron] - Found resource [logback.xml] at [file:/E:/heron/target/classes/logback.xml]
这里使用logback.xml方式配置LogBack。

配置文件的组成

<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
    <encoder>
        <pattern>%d{yyyy-MM-dd HH:mm:ss} [%-5level] %logger{36} [%file:%line] - %msg%n</pattern>
    </encoder>
</appender>

<logger name="webiste.lhc.heron" level="debug" additivity="false">
    <appender-ref ref="rollingFileAppender"/>
</logger>


<root level="debug">
    <appender-ref ref="STDOUT"/>
</root>
整个XML文件由标签包裹,属性含义: scan: 扫描配置文件,查看配置文件是否有改动 scanPeriod:扫描时间间隔 用于定义变量,例如: 输出日志的核心,定义了日志的数据格式、日志类型、日志文件大小、日志保存时间和轮转策略 属性含义:

name:定义logger所用应用的名称,名称随意
class:定义日志输出实现类,常用的输出包括:控制台,文件和消息中间件

决定通过哪种方式写日志

定义日志输出格式,例如:年月日时分秒和毫秒信息,线程名称,类名,日志级别

用于设置一个包或一个类的日志打印级别
属性含义:

name:指定包名或类名
level:定义当前包或类应输出那个范围的日志
additivity:是否继承标签的日志级别定义
在标签中应用已定义的 ,可以指定一个类或一个包如何输出日志;可以包含零个或多个

也是一个,但是它是根logger,且只有一个属性,即:level 日志输出至控制台 在没有日志配置文件之前,SpringBoot框架就会将所有日志输出至控制台,这里是通过BasicConfigurator类来实现的

package ch.qos.logback.classic;

import ch.qos.logback.classic.layout.TTLLLayout;
import ch.qos.logback.classic.spi.Configurator;
import ch.qos.logback.classic.spi.ILoggingEvent;
import ch.qos.logback.core.ConsoleAppender;
import ch.qos.logback.core.encoder.LayoutWrappingEncoder;
import ch.qos.logback.core.spi.ContextAwareBase;

/**

  • BasicConfigurator configures logback-classic by attaching a

  • {@link ConsoleAppender} to the root logger. The console appender’s layout

  • is set to a {@link ch.qos.logback.classic.layout.TTLLLayout TTLLLayout}.

  • @author Ceki Gülcü
    */
    public class BasicConfigurator extends ContextAwareBase implements Configurator {

    public BasicConfigurator() {
    }

    public void configure(LoggerContext lc) {
    addInfo(“Setting up default configuration.”);

     ConsoleAppender<ILoggingEvent> ca = new ConsoleAppender<ILoggingEvent>();
     ca.setContext(lc);
     ca.setName("console");
     LayoutWrappingEncoder<ILoggingEvent> encod
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值