初学logback

1.引入依赖(springboot 已集成)

<dependency>
            <groupId>ch.qos.logback</groupId>
            <artifactId>logback-classic</artifactId>
            <version>1.3.3</version>
</dependency>

2.一个实例

static Logger logger = (Logger) LoggerFactory.getLogger(Text.class);

public static void main(String[] args) throws InterruptedException {

        String str = "hello hello";

        Text.logger.info(str);
    }
getLogger(Text.class) 定义日志名,一般为com.xxx.类名,其自带一个日志记录器root为根记录器,根据包名可进行分级,类比与类的继承关系,用户自定义的记录器level未定义继承上级,所以当配置了记录器实例后出现重复打印的问题,只需在xml记录器中添加记录器可加性additivity为false

3.配置xml(带自动提示功能)

<configuration xmlns="http://ch.qos.logback/xml/ns/logback"
               xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
               xsi:schemaLocation="http://ch.qos.logback/xml/ns/logback
                https://raw.githubusercontent.com/enricopulatzo/logback-XSD/master/src/main/xsd/logback.xsd">
    <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">


<configuration>

ps:该功能需要下载,alt+enter 最后一行。

4. 配置appder

<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
        <!-- encoders are  by default assigned the type
             ch.qos.logback.classic.encoder.PatternLayoutEncoder -->
        <encoder>
            <pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n</pattern>
        </encoder>
      
    </appender>

<logger name="com.Text" level="debug">
        <appender-ref ref="STDOUT"/>
    </logger>

5.自定义appder

package com;

import ch.qos.logback.core.UnsynchronizedAppenderBase;
import ch.qos.logback.core.encoder.Encoder;

import java.io.File;
import java.io.FileOutputStream;


/**
 * @Classname MyAppender
 * @Description TODO
 * @Date 2022/10/20 15:28
 * @Created by JLIU
 */
public class MyAppender<E> extends UnsynchronizedAppenderBase<E>  {
    private Encoder encoder;
    private String file;

    public void setEncoder(Encoder encoder) {
        this.encoder = encoder;
    }

    public void setFile(String file) {
        this.file = file;
    }

    @Override
    protected void append(E e) {
        byte[] encode = this.encoder.encode(e);
        try {
            System.out.println(new String(encode,"utf-8"));
            File f = new File(this.file);
            FileOutputStream outputStream = new FileOutputStream(f,true);
            outputStream.write(encode);
            outputStream.close();
        } catch (Exception unsupportedEncodingException) {
            unsupportedEncodingException.printStackTrace();
        }
    }
}
<appender name="MyAppender" class="com.MyAppender">
        <encoder>
            <pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n</pattern>
        </encoder>
        <file>u.log</file>
    </appender>

 <logger name="com.Text" level="debug">
        <appender-ref ref="MyAppender"/>
    </logger>

6.自定义fliter

package com;

import ch.qos.logback.classic.spi.ILoggingEvent;
import ch.qos.logback.core.filter.Filter;
import ch.qos.logback.core.spi.FilterReply;

/**
 * @Classname MyFilter
 * @Description TODO
 * @Date 2022/10/20 15:55
 * @Created by JLIU
 */
public class MyFilter extends Filter<ILoggingEvent> {
    private String key;

    public void setKey(String key) {
        this.key = key;
    }

    @Override
    public FilterReply decide(ILoggingEvent iLoggingEvent) {
        boolean contains = iLoggingEvent.getMessage().contains(key);
        return contains?FilterReply.ACCEPT:FilterReply.DENY;
    }
}
<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
        <!-- encoders are  by default assigned the type
             ch.qos.logback.classic.encoder.PatternLayoutEncoder -->
        <encoder>
            <pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n</pattern>
        </encoder>
        <filter class="com.MyFilter">
            <key>succ</key>
            <onMatch>ACCEPT</onMatch>
            <onMismatch>DENY</onMismatch>
        </filter>
    </appender>

<logger name="com.Text" level="debug">
        <appender-ref ref="STDOUT"/>
    </logger>

7.总结一般常用的配置

<configuration xmlns="http://ch.qos.logback/xml/ns/logback"
               xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
               xsi:schemaLocation="http://ch.qos.logback/xml/ns/logback
                https://raw.githubusercontent.com/enricopulatzo/logback-XSD/master/src/main/xsd/logback.xsd">
    <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
        <!-- encoders are  by default assigned the type
             ch.qos.logback.classic.encoder.PatternLayoutEncoder -->
        <encoder>
            <pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n</pattern>
        </encoder>
        <filter class="com.MyFilter">
            <key>succ</key>
            <onMatch>ACCEPT</onMatch>
            <onMismatch>DENY</onMismatch>
        </filter>
    </appender>
    <appender name="FILEOUT" class="ch.qos.logback.core.FileAppender">
        <!-- encoders are  by default assigned the type
             ch.qos.logback.classic.encoder.PatternLayoutEncoder -->
        <encoder>
            <pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n</pattern>
        </encoder>
        <file>log.log</file>
    </appender>
<!--    基于时间的滚动-->
    <appender name="FileRouilingT" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <file>my.log</file>
        <encoder>
            <pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n</pattern>
        </encoder>
        <!--    时间策略-->
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <fileNamePattern>log_%d{yyyy-MM-dd HH-mm-ss}.log</fileNamePattern>
            <!-- 最大保留文件数-->
            <maxHistory>3</maxHistory>
            <!-- 文件总大小上限-->
            <totalSizeCap>5GB</totalSizeCap>
        </rollingPolicy>
    </appender>
    <!--    基于时间和大小的滚动-->
    <appender name="FileRouilingTD" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <file>my.log</file>
        <encoder>
            <pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n</pattern>
        </encoder>
        <!--    时间策略-->
        <rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
            <!-- 文件超过时从0编号文件-->
            <fileNamePattern>log_%d{yyyy/MM-dd}.%i.log</fileNamePattern>
            <!-- 最大保留yyyy/MM-dd文件数不是3个文件-->
            <maxHistory>3</maxHistory>
            <!-- 文件总大小上限-->
            <totalSizeCap>5GB</totalSizeCap>
            <!-- 文件大小上限-->
            <maxFileSize>1KB</maxFileSize>
        </rollingPolicy>
    </appender>
    <appender name="MyAppender" class="com.MyAppender">
        <encoder>
            <pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n</pattern>
        </encoder>
        <file>u.log</file>
    </appender>
    <logger name="com.Text" level="debug">
        <appender-ref ref="STDOUT"/>
    </logger>

</configuration>

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值