当前位置: 首页 > article >正文

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");
    }
}

结果

终端打印

文件打印 

 


http://www.kler.cn/a/326714.html

相关文章:

  • springboot 工程使用proguard混淆
  • 决策树python实现代码1
  • 前端:改变鼠标点击物体的颜色
  • 【前端】MVC模式详解:如何构建高效的Web应用程序?
  • 【微信小程序】3|首页搜索框 | 我的咖啡店-综合实训
  • pytorch MoE(专家混合网络)的简单实现。
  • 实验OSPF路由协议(课内实验)
  • 运输层和应用层之间的接口和端口有什么关系
  • Android常用C++特性之std::optional
  • 7. 无线网络安全
  • Docker全家桶:Docker Compose项目部署
  • CICD Jenkins实现Pipline
  • sqli-labs时间盲注、布尔盲注脚本
  • 数据结构之链表(2),双向链表
  • 面试系列-携程暑期实习一面
  • C++ | Leetcode C++题解之第438题找到字符串中所有字母异位词
  • Python Web 应用中的 API 网关集成与优化
  • IText导出pdf不显示泰文
  • 438. 找到字符串中所有字母异位词
  • uniapp 知识点
  • 【前端样式】Sweetalert2简单用法
  • 如何使用ssm实现个人日常事务管理系统+vue
  • 金融教育宣传月 | 平安养老险百色中心支公司开展金融知识“消保县域行”宣传活动
  • 心理咨询预约管理系统(含源码+sql+视频导入教程)
  • web前端与koa框架node后端实现分片断点上传
  • xtu oj 六边形