Logback基本使用

本文涉及的产品
日志服务 SLS,月写入数据量 50GB 1个月
简介: Logback基本使用

Logback的使用

  • Logback是由log4j创始人设计的另一个开源日志组件,性能比log4j要好
  • 官方网站:https://logback.qos.ch/index.html
  • Logback主要分为三个模块:

logback-core:其它两个模块的基础模块
logback-classic:它是log4j的一个改良版本,同时它完整实现了slf4j API
logback-access:访问模块与Servlet容器集成提供通过Http来访问日志的功能

  • 后续的日志代码都是通过SLF4J日志门面搭建日志系统,所以在代码是没有区别,主要是通过修改配置文件和pom.xml依赖

1. logback入门

  1. 添加依赖
<dependency>
    <groupId>ch.qos.logback</groupId>
    <artifactId>logback-classic</artifactId>
    <version>1.2.3</version>
</dependency>

在这里插入图片描述

  1. 代码实现
//定义日志对象
public final static Logger LOGGER = LoggerFactory.getLogger(LogBackTest.class);

@Test
public void test1() {
    // 日志输出
    LOGGER.error("error");
    LOGGER.warn("warn");
    LOGGER.info("info");
    LOGGER.debug("debug"); // logback默认级别
    LOGGER.trace("trace");
}

在这里插入图片描述

2. logback 配置

logback会依次读取以下类型配置文件:

  • logback.groovy
  • logback-test.xml
  • logback.xml

如果均不存在会采用默认配置

  1. logback组件之间的关系

    1. Logger:日志的记录器,把它关联到应用的对应的context上后,主要用于存放日志对象,也

    可以定义日志类型、级别。

    1. Appender:用于指定日志输出的目的地,目的地可以是控制台、文件、数据库等等。
    2. Layout:负责把事件转换成字符串,格式化的日志信息的输出。在logback中Layout对象被封

    装在encoder中。

  2. 基本配置信息
<?xml version="1.0" encoding="UTF-8"?>
<configuration>

    <!--
    配置集中管理属性
    可以直接改属性的value值
    格式:${name}
    -->

    <property name="pattern" value="[%-5level] %d{yyyy-MM-dd HH:mm:ss.SSS} %c %M %L %thread %m%n"></property>
    <!--
    日志输出格式:
    %-5level
    %d{yyyy-MM-dd HH:mm:ss.SSS}日期
    %c类的完整名称
    %M为method
    %L为行号
    %thread线程名称
    %m或者%msg为信息
    %n换行
    -->

    <!--定义日志文件保存路径-->
    <property name="log_dir" value="/logs"></property>

    <!--控制台日志输出的 appender-->
    <appender name="console" class="ch.qos.logback.core.ConsoleAppender">
        <!--控制台输出流对象:默认 System.out 改为 system.err-->
        <target>System.err</target>
        <!--日志消息格式配置-->
        <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
            <pattern>${pattern}</pattern>
        </encoder>
    </appender>

    <!--日志文件输出的 appender-->
    <appender name="file" class="ch.qos.logback.core.FileAppender">
        <!--日志文件的保存路径-->
        <file>${log_dir}/logback.log</file>
        <!--日志消息格式配置-->
        <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
            <pattern>${pattern}</pattern>
        </encoder>
    </appender>

    <!--html 格式日志文件输出 appender-->
    <appender name="htmlFile" class="ch.qos.logback.core.FileAppender">
        <!--日志文件的保存路径-->
        <file>${log_dir}/logback.html</file>
        <!--html日志消息格式配置-->
        <encoder class="ch.qos.logback.core.encoder.LayoutWrappingEncoder">
            <layout class="ch.qos.logback.classic.html.HTMLLayout">
                <pattern>%-5level%d{yyyy-MM-dd HH:mm:ss.SSS}%c%M%L%thread%m</pattern>
            </layout>
        </encoder>
    </appender>

    <!--root logger 配置-->
    <root level="ALL">
        <appender-ref ref="console"/>
        <appender-ref ref="file"/>
        <appender-ref ref="htmlFile"/>
    </root>


</configuration>
public class LogbackTest {

    public static final Logger LOGGER = LoggerFactory.getLogger(LogbackTest.class);

    @Test
    public void test1() {
        LOGGER.error("error");
        LOGGER.warn("warn");
        LOGGER.info("info");
        LOGGER.debug("debug"); // logback默认级别
        LOGGER.trace("trace");
    }

}

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

  1. FileAppender配置
  2. RollingFileAppender配置
<!--日志拆分和归档压缩的 appender 对象-->
<appender name="roleFile" class="ch.qos.logback.core.rolling.RollingFileAppender">
    <!--日志文件的保存路径-->
    <file>${log_dir}/roll_logback.log</file>
    <!--日志消息格式配置-->
    <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
        <pattern>${pattern}</pattern>
    </encoder>
    <!--指定拆分的规则-->
    <rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
        <!--按照时间和压缩格式声明拆分的文件名-->
        <fileNamePattern>${log_dir}/rolling.%d{yyyy-MM-dd}.log%i.gz</fileNamePattern>
        <!--按照文件大小拆分-->
        <maxFileSize>1MB</maxFileSize>
    </rollingPolicy>
</appender>

在这里插入图片描述

  1. Filter和异步日志配置
  • 过滤 ERROR 级别的日志
<!--日志拆分和归档压缩的 appender 对象-->
<appender name="roleFile" class="ch.qos.logback.core.rolling.RollingFileAppender">
    <!--日志文件的保存路径-->
    <file>${log_dir}/roll_logback.log</file>
    <!--日志消息格式配置-->
    <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
        <pattern>${pattern}</pattern>
    </encoder>
    <!--指定拆分的规则-->
    <rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
        <!--按照时间和压缩格式声明拆分的文件名-->
        <fileNamePattern>${log_dir}/rolling.%d{yyyy-MM-dd}.log%i.gz</fileNamePattern>
        <!--按照文件大小拆分-->
        <maxFileSize>1MB</maxFileSize>
    </rollingPolicy>
    <!--日志过滤级别-->
    <filter class="ch.qos.logback.classic.filter.LevelFilter">
        <!--日志过滤规则-->
        <level>ERROR</level>
        <onMatch>ACCEPT</onMatch>
        <onMismatch>DENY</onMismatch>
    </filter>
</appender>

在这里插入图片描述

  • 自定义 logger 对象,如下就会输出 info 级别以上的日志
<!--自定义 logger 对象,additivity="false" 自定义logger对象是否继承 root logger-->
<logger name="com.xdr630" level="info" additivity="false">
    <appender-ref ref="console"></appender-ref>
</logger>
  1. 官方提供的log4j.properties转换成logback.xml

https://logback.qos.ch/translator/

3. logback-access的使用

  • logback-access模块与Servlet容器(如Tomcat和Jetty)集成,以提供HTTP访问日志功能,可以使用logback-access模块来替换tomcat的访问日志。
  1. 将logback-access.jar与logback-core.jar复制到$TOMCAT_HOME/lib/目录下
<Valve className="ch.qos.logback.access.tomcat.LogbackValve" />
  1. 修改$TOMCAT_HOME/conf/server.xml中的Host元素中添加:
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<!-- always a good activate OnConsoleStatusListener -->
  <statusListener class="ch.qos.logback.core.status.OnConsoleStatusListener"/>
  <property name="LOG_DIR" value="${catalina.base}/logs"/>
  <appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
    <file>${LOG_DIR}/access.log</file>
    <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
    <fileNamePattern>access.%d{yyyy-MM-dd}.log.zip</fileNamePattern>
    </rollingPolicy>

    <encoder>
    <!-- 访问日志的格式 -->
        <pattern>combined</pattern>
    </encoder>
  </appender>
  
<appender-ref ref="FILE"/>
</configuration>
目录
相关文章
|
Java API Apache
springboot 日志配置(logback)(一)
springboot 日志配置(logback)
449 0
|
8天前
|
Java 中间件
SpringBoot入门(6)- 添加Logback日志
SpringBoot入门(6)- 添加Logback日志
43 5
|
6月前
|
Java 文件存储 Spring
【springboot】logback配置
【springboot】logback配置
88 1
|
6月前
|
Java API 开发者
Logback简介与配置详解
在开发和维护Spring Boot应用程序时,一个强大而灵活的日志框架是至关重要的。Spring Boot默认集成了Logback,一个高性能的Java日志框架。本文将介绍如何配置Logback以满足你的日志记录需求。
271 1
 Logback简介与配置详解
QGS
|
6月前
|
Java 数据库连接 Apache
Springboot日志框架logback与log4j2
Springboot日志框架logback与log4j2
QGS
129 0
|
Java Spring
SpringBoot整合Sfl4j+logback的实践
对于一个web项目来说,日志框架是必不可少的,日志的记录可以帮助我们在开发以及维护过程中快速的定位错误。`slf4j`,`log4j`,`logback`,`JDK Logging`等这些日志框架都是我们常见的日志框架,本文主要介绍这些常见的日志框架关系和SpringBoot整合Sfl4j+logback的实践。
353 1
|
XML SQL Java
springboot 日志配置(logback)(二)
springboot 日志配置(logback)(二)
258 0
|
前端开发 Java Spring
《Spring MVC》 第十章 使用logback+Slf4j打印日志
《Spring MVC》 第十章 使用logback+Slf4j打印日志
203 0
|
Java 大数据
快速入门日志组件logback
你好看官,里面请!今天笔者讲的是快速入门日志组件logback。不懂或者觉得我写的有问题可以在评论区留言,我看到会及时回复。 注意:本文仅用于学习参考,不可用于商业用途,如需转载请跟我联系。
245 2
快速入门日志组件logback
|
Oracle Java 关系型数据库
SpringBoot应用自定义logback日志
SpringBoot应用自定义logback日志
411 0
SpringBoot应用自定义logback日志