sheng的学习笔记-logback

基础知识

什么是logback

Logback是一个用于Java应用程序的日志框架,提供了更好的性能、可扩展性和灵活性。

与Log4j相比,Logback提供了更快的速度和更低的内存占用,这使得它成为大型企业级应用程序的理想选择。

logback和slf4j的关系是

 logback是slf4j的一个具体实现。slf4j是一个日志门面(facade),提供了一系列的日志接口,而logback是实现这些接口的具体日志框架。应用程序通过调用slf4j的API进行日志操作,而实际的日志输出是由底层的日志框架(如logback)来实现的。

示例程序

引入的包

slf4j-api.jarlogback-core.jarlogback-classic.jar引入项目。

引用的包先不着急,我是springboot的项目,pom.xml用的spring的其他包自动引用了

配置文件

在application.yml中增加配置

logging:
  config: classpath:mylogback.xml

在Springboot项目中,如果没有配置,自动寻找 src/main/resources路径下的logback-spring.xml的文件

配置文件基本结构如下图:

logger标签

logger就是日志记录器,用来控制要输出哪些日志记录语句,对日志信息进行级别限制。

有level属性、name属性、additivity属性,其中name属性必须要写,指定到哪一个类或者哪一个包,additivity表示是否向上一层传递打印信息,默认为true。可以包含 appender-ref 元素
使用示例:

<configuration>
    <logger level="ERROR" name="com.example.testlog.LogTest" additivity="false">
        <appender-ref ref="STDOUT"></appender-ref>
    </logger>
</configuration>
 

root标签

root标签指定最基础的的日志输出级别,它只有一个level属性,可以包含 appender-ref 元素。
level属性可以选择,ALLTRACEDEBUGINFOWARNERRORNULLOFFINHERITED
使用示例:

<configuration>
    <root level="debug">
        <appender-ref ref="STDOUT"></appender-ref>
    </root>
</configuration>
 

appender标签

appender就是附加器,日志记录器会将输出的任务交给附加器完成,不同的附加器会将日志输出到不同的地方,例如控制台、文件、网络等

几个常见的附加器:

控制台附加器:ch.qos.logback.core.ConsoleAppender
文件附加器:ch.qos.logback.core.FileAppender
滚动文件附加器:ch.qos.logback.core.rolling.RollingFileAppender

属性有name、class,class用来指定附加器,name来表示当前附件器的名字。其他需要指定附件器的标签,可以通过appender-ref标签中的ref来指定。可以包含encoder元素、fileter元素等

使用示例:

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

filter标签

filter是过滤器,过滤器是附件器的一个组件,它是用于判断附件器是否输出日志的。一个附件器可以包含多个过滤器。
过滤器只能有三个值,DENY、NEUTRAL、ACCEPT。
DENY是不输出日志
NEUTRAL是不决定是否输出日志
ACCEPT是输出日志。

可以有三个元素,level元素、onMatch元素、onMismatch元素。<level>:设置过滤级别
<onMatch>:用于配置符合过滤条件的操作
<onMismatch>:用于配置不符合过滤条件的操作。
使用示例:

<configuration>
     <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
        <filter>
            <level>info</level>
            <onMatch>DENY</onMatch>
            <onMismatch>ACCEPT</onMismatch>
        </filter>
        <encoder>
            <pattern>%d{HH:mm:ss.SSS} [%-5level] %logger{36} - %msg%n</pattern>
        </encoder>
    </appender>
</configuration>
 

encoder标签

encoder最主要的就是pattern标签,用于控制输出日志的格式

%d: 表示日期
%-5level:日志级别
%thread:表示线程名
%logger:输出日志的类名
logger{length}:对输出日志的类名缩写展示
%msg:日志输出内容
%n:换行符
-:左对齐

使用示例:

<encoder>
     <pattern>%d{HH:mm:ss.SSS} [%-5level] %logger{36} - %msg%n</pattern>
</encoder>
 

property标签(变量配置)

property标签用来定义变量, 有两个属性,name和value;其中name的值是变量的名称,value的值时变量定义的值

使用示例:

<property name="HOME" value="../log">

<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
    <file>${HOME}/log.log</file>
</appender>

logger和root的区别

在logback中,logger和root logger都是日志记录器(logger)的实例,用于控制日志的输出级别。它们之间的区别在于它们的作用范围和默认配置。

logger是应用程序中的具体组件或类的日志记录器。每个logger都可以单独配置,以控制特定组件或类的日志输出级别。通过logger,我们可以对不同的组件或类设置不同的日志级别,从而灵活地控制日志的输出。

root logger是logger的顶级父级别。它是logger层次结构的根节点,用于控制整个应用程序的日志输出级别。如果没有为特定的logger配置日志级别,那么它将继承root logger的日志级别。因此,root logger的日志级别可以被视为默认的全局日志级别。

完整配置文件 

<?xml version="1.0" encoding="UTF-8"?>
<configuration>
    <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
        <encoder>
            <pattern>%d{HH:mm:ss.SSS} [%-5level] %logger{36} - %msg%n</pattern>
        </encoder>
    </appender>

    <appender name="FILE" class="ch.qos.logback.core.FileAppender">
        <file>logs/logfile.log</file>
        <append>true</append>
        <encoder>
            <pattern>%d{HH:mm:ss.SSS} [%-5level] %logger{36} - %msg%n</pattern>
        </encoder>
    </appender>

    <root level="info">
        <appender-ref ref="STDOUT"/>
    </root>

    <logger level="debug" name="com.sheng" additivity="false">
        <appender-ref ref="STDOUT"/>
        <appender-ref ref="FILE"/>
    </logger>

</configuration>

代码

package com.sheng.utils;

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

public class LogTest {
    final static Logger logger = LoggerFactory.getLogger(LogTest.class);

    public static void main(String[] args) {
        logger.debug("Debug message");
        logger.info("Info message");
        logger.warn("Warning message");
        logger.error("Error message");
    }
}

结果

终端打印

文件打印 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值