Logback基本使用

举报
兮动人 发表于 2023/02/09 21:21:51 2023/02/09
【摘要】 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上后,主要用于存放日志对象,也
      可以定义日志类型、级别。
    2. Appender:用于指定日志输出的目的地,目的地可以是控制台、文件、数据库等等。
    3. 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>
【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。