java-log-Logback笔记

发布于:2022-07-24 ⋅ 阅读:(279) ⋅ 点赞:(0)

Logback是由log4j创始人设计的另一个开源日志组件,性能比log4j要好。


Logback主要分为三个模块:

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

导入依赖

<!-- 日志门面 -->
        <dependency>
            <groupId>org.slf4j</groupId>
            <artifactId>slf4j-api</artifactId>
            <version>1.7.25</version>
        </dependency>

        <!-- 日志实现 -->
        <dependency>
            <groupId>ch.qos.logback</groupId>
            <artifactId>logback-classic</artifactId>
            <version>1.2.3</version>
        </dependency>

快速入门

package icu.weizhan;

import org.junit.Test;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

public class Logback {

    //日志记录器对象
    public static final Logger LOGGER = LoggerFactory.getLogger(Logback.class);

    @Test
    public void logbackTest(){
        //日志输出
        LOGGER.error("error");
        LOGGER.warn("warn");
        LOGGER.info("info");
        LOGGER.debug("debug");
        LOGGER.trace("trace");
    }
}

 logback配置


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

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

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


 logback组件之间的关系
1. Logger:日志的记录器,把它关联到应用的对应的context上后,主要用于存放日志对象,也可以定义日志类型、级别。
2. Appender:用于指定日志输出的目的地,目的地可以是控制台、文件、数据库等等。
3.Layout:负责把事件转换成字符串,格式化的日志信息的输出。在logback中Layout对象被封装在encoder中。

logback.xml

<?xml version="1.0" encoding="utf-8"?>
<configuration>
    <!--  配置集中管理的格式  我们可以直接改value值,通过name获取value,${name}-->
    <!--  日志输出格式:
            %-5level
            %d{yyyy—MM-dd HH : mm : ss .SSS} 日期
            %c类的完整名称
            %M为method
            %L为行号
            %thread线程名称
            %m或者%msg为信息
            %n换行
    -->
    <property name="pattern" value="[%-5level] %d{yyyy-MM-dd HH : mm : ss .SSS} %c %M %L [%thread] %m %n"></property>

    <!-- 定义日志文件保存的路径-->
    <property name="log_dir" value="C:/Users/hwz/Desktop/log"></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="html_file" 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>

    <!-- 日志拆分和归档压缩的appender对象-->
    <appender name="rollFile" 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-HH-mm-ss}.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>

    <!-- 异步日志(提高性能)-->
    <appender name="async" class="ch.qos.logback.classic.AsyncAppender">
        <!-- 指定具体的appender -->
        <appender-ref ref="rollFile"></appender-ref>
    </appender>

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

    <!-- 自定义 logger对象 配置
        additivity="false"   自定义 logger是否继承rootLogger
    -->
    <logger name="icu.weizhan" level="info" additivity="false">
        <appender-ref ref="console"></appender-ref>
    </logger>

</configuration>

 logback-access的使用
logback-access模块与Servlet容器(如Tomcat和Jetty)集成,以提供HTTP访问日志功能。我们可以使用logback-access模块来替换tomcat的访问日志。

  1. 将logback-access.jar与logback-core.jar复制到$TOMCAT_HOME/lib/目录下
  2. 修改$TOMCAT_HOME/conflserver.xml中的Host元素中添加:<Value className="ch.qos .logback.access.tomcat.LogbackValue"/>
  3. logback默认会在$TOMCAT_HOME/conf下查找文件 logback-access.xml

logback-access.xml

<?xml version="1.0" encoding="UTF-8" ?>
<configuration>
    <statuListen 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>


网站公告

今日签到

点亮在社区的每一天
去签到