日志框架 --- Logback

news2024/11/24 11:11:42

文章目录

  • 1. 什么是logback
  • 2. logback的日志级别
  • 3. 日志级别的层级
  • 4. logback配置文件
    • 4.1 logger标签
    • 4.2 root标签
    • 4.3 appender标签
    • 4.4 filter标签
    • 4.5 encoder标签
  • 5. 整体演示
    • 5.1 配置文件
    • 5.2 运行结果

1. 什么是logback

Logback是一个用于Java应用程序的日志框架,它由log4j框架的创始人Ceki Gülcü开发。logback是log4j框架的继承者和改进版,并提供了更好的性能、可扩展性和灵活性。与Log4j相比,Logback提供了更快的速度和更低的内存占用,这使得它成为大型企业级应用程序的理想选择。

Logback包括三个模块:logback-core、logback-classic和logback-access。

  1. logback-core提供了通用的日志记录功能;
  2. logback-classic提供了与SLF4J API和log4j API兼容的日志记录功能;
  3. logback-access提供了HTTP访问日志的功能。

同时,Logback还支持异步日志记录、多线程环境下的高性能、动态配置等特性,使得它成为Java应用程序中广泛使用的日志框架之一。

2. logback的日志级别

Logger有五个日志级别,分别是TRACEDEBUGINFOWARNERROR
这五个级别优先级为,TRACE<DEBUG<INFO<WARN<ERROR

在打印日志的时候,只会打印当前日志级别高于或者等于当前日志级别的日志信息。例如当前日志级别为INFO,那么只会记录日志级别为INFO、WARN、ERROR的日志信息。

查看springboot项目的日志级别,使用下面代码进行测试。

@Service
public class LogTest {
    private static final Logger logger = LoggerFactory.getLogger(LogTest.class);
    public  void test() {
        logger.trace("===trace===");
        logger.debug("===debug===");
        logger.info("===info===");
        logger.warn("===warn===");
        logger.error("===error===");
    }
}

测试代码

@SpringBootTest
class LogbackApplicationTests {

    @Resource
    private LogTest logTest;
    @Test
    void testqwe() {
        logTest.test();
    }
}

测试结果
在这里插入图片描述
所以SpringBoot项目中logback默认日志级别是INFO

3. 日志级别的层级

一般日志的最高层级就是root。例如现在创建一个logger是com.example.logback下的logger,结构如下。
在这里插入图片描述
这里的日志级别如果没有指定,也会继承父类。

4. logback配置文件

logback配置文件一般在springboot项目的src/main/resources目录下创建名为logback-spring.xml的文件

配置文件基本结构如下图:
在这里插入图片描述

4.1 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>

4.2 root标签

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

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

4.3 appender标签

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

几个常见的附加器:

  1. 控制台附加器:ch.qos.logback.core.ConsoleAppender
  2. 文件附加器:ch.qos.logback.core.FileAppender
  3. 滚动文件附加器: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>

4.4 filter标签

filter是过滤器,过滤器是附件器的一个组件,它是用于判断附件器是否输出日志的。一个附件器可以包含多个过滤器。
过滤器只能有三个值,DENYNEUTRALACCEPT
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>

4.5 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>

5. 整体演示

5.1 配置文件

<?xml version="1.0" encoding="UTF-8"?>
<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">
        <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>E:/workspace/logback/logfile.txt</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="trace" name="com.example.testlog.LogTest" additivity="false">
        <appender-ref ref="STDOUT"/>
        <appender-ref ref="FILE"/>
    </logger>

    

</configuration>

5.2 运行结果

控制台打印的信息
在这里插入图片描述

文件夹输出的信息

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/610109.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

android 如何分析应用的内存(三)

android 如何分析应用的内存&#xff08;三&#xff09; 接上文 细节部分包括如下 native部分 寄存器内容是什么。如pc指向何处&#xff0c;sp指向何处指定地址内容是什么。如变量a对应的内容线程堆栈内容是什么。如主线程的堆栈&#xff0c;UI线程的堆栈堆区的对象有哪些。…

图像边缘提取

什么是图像边缘: 图象的边缘是指图象局部区域亮度变化显著的部分&#xff0c;该区域的灰度剖面一般可以看作是一个阶跃&#xff0c;既从一个灰度值在很小的缓冲区域内急剧变化到另一个灰度相差较大的灰度值。 什么是灰度值: 指图像中点的颜色深度&#xff0c;范围一般从0到255…

C/C++性能提升之cache分析

在开发过程中&#xff0c;我们有时会碰到程序性能瓶颈&#xff0c;这时候需要我们查找热点代码&#xff0c;借用一些命令、工具去分析自己的程序&#xff0c;下面我就介绍一下如何使用perf工具分析程序的cache命中率。 在编写代码前先介绍一下我们的硬件平台&#xff0c;我电脑…

【LeetCode全题库算法速练】2、两数相加

文章目录 一、题目&#x1f538;题目描述&#x1f538;样例1&#x1f538;样例2&#x1f538;样例3 二、代码参考 作者&#xff1a;KJ.JK &#x1f308; &#x1f308; &#x1f308; &#x1f308; &#x1f308; &#x1f308; &#x1f308; &#x1f308; &#x1f308; &a…

chatgpt赋能python:Python多行代码一行展示:精简代码,高效编程的绝佳选择

Python多行代码一行展示&#xff1a;精简代码&#xff0c;高效编程的绝佳选择 介绍 在Python的开发中&#xff0c;我们经常需要编写较长的代码&#xff0c;在展示和调试代码时&#xff0c;多行代码会使代码显得过长和复杂。同时&#xff0c;多行代码还会增加代码中的空白行数…

chatgpt赋能python:Python处理颜色RGB简介

Python 处理颜色 RGB 简介 在现代 Web 设计中&#xff0c;颜色的使用非常重要。网站和应用程序的设计师通常需要控制经他们的项目中使用的颜色。最常见的颜色表示方法是 RGB&#xff0c;即红、绿、蓝。RGB 是一种添加光线颜色的方法&#xff0c;它基于红、绿和蓝三种颜色原料的…

Linux操作系统——第一章 进程

目录 基本概念 描述进程-PCB task_struct-PCB的一种 task_ struct内容分类 组织进程 查看进程 通过系统调用获取进程标示符 通过系统调用创建进程-fork初识 进程状态 进程状态查看 Z(zombie)-僵尸进程 僵尸进程危害 孤儿进程 进程优先级 基本概念 查看系统进程 …

【RestAPI】优秀Rest API设计规范

一、API 设计原则 将 REST 映射到 DDD 模式 实体、聚合和值对象等模式旨在对领域模型中的对象施加特定的约束。 在 DDD 的许多介绍文章中&#xff0c;模式是使用构造函数或属性 getter 和 setter 等面向对象的 (OO) 语言概念建模的。 设计 API 时&#xff0c;请考虑这些 API…

前后端分离的前端部署渲染方案总结

前后端分离主要是为了区分后端和前端&#xff0c;以前前端代码是直接将HTML和静态文件丢给后端&#xff0c;由后端完成数据动态交互&#xff0c;所以后端既要写后端逻辑&#xff0c;又要写前端的数据交互逻辑。 前后端分离后后端只需要提供接口&#xff0c;前端则必须要完成对…

安装lora+启动lora+训练一个model

一、安装步骤 conda create -n kohya_ss python3.10.8 cd code git clone https://github.com/bmaltais/kohya_ss.git cd kohya_ss 然后修改了setup.sh里面的xformers里面的下载地址&#xff08;因为自带的那个地址&#xff0c;拉取需要1个小时&#xff0c;太慢了&#xff09;…

chatgpt赋能python:Python基础词汇解析

Python基础词汇解析 作为一门流行且易学的编程语言&#xff0c;Python在很多场合得到了广泛的应用。在学习Python编程的过程中&#xff0c;掌握各类基础词汇是非常关键的。本文将介绍Python编程中一些常见且重要的基础词汇&#xff0c;帮助大家更好地了解和掌握Python编程。 …

chatgpt赋能python:Python多级雷达图绘制解析

Python多级雷达图绘制解析 雷达图&#xff08;Radar Chart&#xff09;是一种可视化工具&#xff0c;常用于多个指标的对比展示。与其他图形不同&#xff0c;雷达图中&#xff0c;数据不是放在X、Y轴上&#xff0c;而是以多边形的形式展现。利用Python语言&#xff0c;可以绘制…

chatgpt赋能python:Python声音检测:如何用Python实现声音检测

Python声音检测&#xff1a;如何用Python实现声音检测 声音检测是近年来越来越受到关注的技术&#xff0c;它可以应用在很多场合&#xff0c;如语音识别、安防监控等。Python作为一种强大的编程语言&#xff0c;也可以实现声音检测功能。本文将介绍Python声音检测的原理、实现…

chatgpt赋能python:Python多选:提升代码效率的必备工具

Python 多选&#xff1a;提升代码效率的必备工具 如果你是一个有多年 Python 编程经验的工程师&#xff0c;那么你肯定会知道 Python 多选是一个非常实用的工具。它可以帮助你提高代码的效率&#xff0c;减少编程的时间和工作量。在本文中&#xff0c;我们将介绍 Python 多选的…

模拟实现 Spring IOC(详解)

文章目录 前言Spring IoCSpring IoC 概述Spring IoC 技术难点Spring IoC 框架思考需求分析 Spring IoC 技术难点实现Spring IoC 模拟实现Bean工厂模式实现Bean注解的循环依赖基础建立 前言 Spring是一种 Java 开发框架&#xff0c;其主要功能有两个&#xff1a;IoC(DI)和AOP。…

什么是高并发?

目录 什么是高井发系统 1.1 什么是高井发 1.2 高井发系统有哪些关键指标 1.2.1 响应时间 1.2.2 吞吐量 1.2.3 每秒请求数(QPS) 1.2.4 每秒事务数 (TPS) 1.2.5 访问量 (PV) 1.2.6 独立访客 (UV) 1.2.7 网络流量 1.3 为什么学习高并发系统 1.32在面试中脱颖而出 什么…

Android:Selector + Layer-lists + Shape 实现 “缺右下角Button“

UI需求&#xff1a;实现"缺右下角的渐变Button"效果 实现方式有两种&#xff1a; 一.UI绘制.9背景图&#xff0c;Selector直接实现 二.使用Shape与Selector、Layer-lists实现 UI给的设计稿里没有Button背景图&#xff0c;我用Shape做完了他告诉我他有做背景图&…

字符串搜索算法:暴力搜索,KMP

目录 前言废话暴力搜索KMP算法 前言废话 最近脑子有点昏昏沉沉&#xff0c;喝点那种红枣泡的白酒居然神奇的好了一些&#xff0c;感觉很舒服。看来喝少量的酒可以让人更清醒&#xff0c;长期喝可能有养生的效果&#xff1f; 写道这里去百度了下&#xff0c;发现红枣还真有养生效…

js中this关键字的作用和如何改变其上下文

一、this 关键字的作用 JavaScript 中的 this 关键字引用了所在函数正在被调用时的对象。在不同的上下文中&#xff0c;this 的指向会发生变化。 在全局上下文中&#xff0c;this 指向全局对象&#xff08;在浏览器中是 window 对象&#xff0c;在 Node.js 中是 global 对象&…

CV | Emotionally Enhanced Talking Face Generation论文详解及代码实现

本博客主要讲解了Emotionally Enhanced Talking Face Generation&#xff08;情感增强的谈话人脸生成&#xff09;论文概括与项目实现&#xff0c;以及代码理解。 Emotionally Enhanced Talking Face Generation Paper :https://arxiv.org/pdf/2303.11548.pdf Code: GitHub - s…