Java基础——日志,Logback入门

news2025/1/23 22:40:07

日志

(1)程序中的日志:

  • 程序中的日志可以用来记录程序运行过程中的信息,并可以永久存储。

 (2)日志技术具备的优势:

  • 可以将系统执行的信息选择性的记录到指定位置(控制台,文件中,数据库中)。
  • 可以随时以开光的形式控制是否记录日志,无需修改源代码。
  • 多线程,性能较好。

(3)日志体系结构:

1.日志规范:一些接口,提供给日志的实现框架设计的标准。

  • Commons Logging (JCL)
  • Simple Logging Facade for Java (slf4j) ==>因为有人对JCL的接口不满意,就搞了SLF4J。

2. 日志框架:牛人或者第三方公司已经做好的日志记录实现代码,后来者直接可以拿去使用。

  • Log4j
  • JUL(java.util.loggiing)
  • Logback ==> 因为对Log4j的性能不满意,就搞了Logback。
  • 其他实现

Logback 

(1)Logback日志框架:(官网:https://logback.qos.ch/)

  • Logback是由log4j创始人设计的另一个开源日志组件,性能比log4j要好。
  • Logback是基于slf4j的日志规范实现的框架。

(2)Logback主要分三个技术模块:

  • logback-core:logback-core模块为其他两个模块奠定了基础,必须有。

  • logback-classic:它是log4j的一个改良版本,同时它完整实现了slf4j API。
  • logback-access模块与Tomcat和Jetty等Servlet容器集成,以提供HTTP访问日志功能。

 (使用Logback需要使用:slf4j-api,logback-core,logback-classic三个模块)

(3)导入Logback日志技术到项目中,用于记录系统的日志信息,操作如下:

1.在项目下新建文件夹lib(依赖库文件),导入Logback的相关jar包到文件夹下,并添加到项目依赖库中去。

  • 官网上下载Logback需要的三个模块,即三个jar包:
    • 1.logback-core,logback-classic的jar包下载:https://logback.qos.ch/

 

 

  • 2. slf4j-api的jar包下载:https://www.slf4j.org/

 

 

  •  添加到项目依赖库中去:

 

 2.将Logback的核心配置文件logback.xml直接拷贝到src目录下(必须是src下):

 

将以下代码复制到配置文件在:

<?xml version="1.0" encoding="UTF-8"?>
<configuration>
    <!-- CONSOLE :表示当前的日志信息是可以输出到控制台的 -->
    <appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender">
        <!--输出流对象 默认 System.out 改为 System.err  其中err:控制台输出日志为红色,而out为黑色-->
        <target>System.out</target>
        <encoder>
            <!--格式化输出:%d表示日期,%thread表示线程名,%-5level:级别从左显示5个字符宽度 %msg:日志消息,%n是换行符-->
            <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%-5level]  %c [%thread] : %msg%n</pattern>
        </encoder>
    </appender>

    <!-- File:表示当前的日志信息是可以输出到文件的 -->
    <appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <encoder>
            <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n</pattern>
            <charset>utf-8</charset>
        </encoder>
        <!--日志输出路径(logback_message.log是文档名,下方还有一处文件名(不用写.log))-->
        <file>E:\code\javasepromax\Logbacktest\logback_message.log</file>
        <!--指定日志文件拆分和压缩规则(防止文件过大)-->
        <rollingPolicy
                class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
            <!--通过指定压缩文件名称,来确定分割文件方式-->
            <fileNamePattern>E:\code\javasepromax\Logbacktest\logback_message-%d{yyyy-MMdd}.log%i.gz</fileNamePattern>
            <maxFileSize>1MB</maxFileSize> <!--文件拆分大小-->
        </rollingPolicy>
    </appender>

    <!--
    level:用来设置打印级别,大小写无关:TRACE, DEBUG, INFO, WARN, ERROR, ALL 和 OFF (关掉), 默认debug(可忽略大小写)
    <root>可以包含零个或多个<appender-ref>元素,标识这个输出位置将会被本日志级别控制。
    -->
    <root level="INFO"> <!--打印规则:只打印不低于当前级别的日志-->
        <appender-ref ref="CONSOLE"/> <!--如果这个地方不配置关联打印的位置,改位置将不会记录日志-->
        <appender-ref ref="FILE" />
    </root>
</configuration>

 其中,日志文件的输出地址需修改成自己的

 3.在代码中获取日志对象:

public static final Logger LOGGER = LoggerFactory.getLogger("类对象");

例如: 

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

/**
 * 目标:快速搭建Logback日志架构 记录程序的执行情况到控制台 到文件
 */
public class Demo01 {
    //创建Logback的日志对象,代表日志技术
    public static final Logger LOGGER = LoggerFactory.getLogger("Test.class");

    public static void main(String[] args) {
        try {
            LOGGER.debug("main方法开始执行。");
            LOGGER.info("开始记录第二行日志,准备开始除法运算");
            int a = 10;
            int b = 0;
            LOGGER.trace("a=" + a);
            LOGGER.trace("b=" + b);
            System.out.println(a/b);
        } catch (Exception e) {
            e.printStackTrace();
            LOGGER.error("功能出现异常" + e);
        }
    }
}

 结果:

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

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

相关文章

GEE:支持矢量机(SVM)分类教程

在Google Earth Engine平台上,使用支持向量机(SVM)进行土地利用分类是一种强大的技术。在本文中,我们将介绍如何使用GEE和SVM算法进行土地利用分类。 结果展示, 具体过程如下: 数据准备 首先,我们需要准备用于分类的地理空间数据,包括土地覆盖类型和地表特征数据。GE…

队列知识及编程练习总结

目录 一、背景知识 二、队列的应用 &#xff08;一&#xff09;在Spring中的应用 &#xff08;二&#xff09;在其他框架中的应用 &#xff08;三&#xff09;在实际开发中的应用 三、相关编程练习 &#xff08;一&#xff09;用队列实现栈 &#xff08;二&#xff09…

【CE】Mac下的CE教程Tutorial:进阶篇(第8关:多级指针)

▒ 目录 ▒&#x1f6eb; 导读开发环境1️⃣ 第8关&#xff1a;多级指针翻译操作验证其它方案&#x1f6ec; 文章小结&#x1f4d6; 参考资料&#x1f6eb; 导读 开发环境 版本号描述文章日期2023-03-操作系统MacOS Big Sur 11.5Cheat Engine7.4.3 1️⃣ 第8关&#xff1a;多…

DCT-Net工业级轻量化人像漫画

工业级轻量AI人像漫画开源模型技术解析_哔哩哔哩_bilibiliModelScope 旨在打造下一代开源的模型即 服务共享平台&#xff0c;为泛 AI 开发者提供灵活、易用、低成本的一站式模型服务产品&#xff0c;让模型应用更简单&#xff01;欢迎使用魔搭社区&#xff1a;ModelScope.cn, 视…

JVM:线上服务CPU爆满,如何排查(三)

0. 引言 前一段时间出现了一个正则表达式引起的线上CPU爆满的问题&#xff0c;一开始没有在第一时间定位到问题&#xff0c;这里也特此记录一下&#xff0c;同时也系统的梳理下CPU爆满问题的排查思路和方法&#xff0c;为后续的同学提供参考。 1. CPU爆满问题产生的原因 我们…

八大排序算法之插入排序、希尔排序、选择排序

个人主页&#xff1a;平行线也会相交 欢迎 点赞&#x1f44d; 收藏✨ 留言✉ 加关注&#x1f493;本文由 平行线也会相交 原创 收录于专栏【数据结构初阶&#xff08;C实现&#xff09;】 本篇主要讲解八大排序算法中的三种排序&#xff0c;分别是&#xff1a;插入排序、希尔排…

yum源配置

一、互联网yum源&#xff08;centos7为例&#xff09;: cd /etc/yum.repos.d/ && rm -f *.repo;wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo && wget -P /etc/yum.repos.d/ http://mirrors.aliyun.com/repo…

Golang编译报错 ‘invalid char’

现象 最近在新电脑安装go环境&#xff0c;发现 golang 包名如果有汉字就不能编译运行。 具体来讲&#xff0c;就是 go mod tidy 报错 ‘invalid char’ 但是&#xff0c;我在以前的电脑上运行 go mod tidy 没有问题 原因 我对比了 go sdk 版本&#xff0c;旧电脑用 go 1.13…

Html5钢琴块游戏制作(音乐游戏)

当年一款手机节奏音游&#xff0c;相信不少人都玩过或见过。最近也是将其做了出来分享给大家。 游戏的基本玩法&#xff1a;点击下落的黑色方块&#xff0c;弹奏音乐。&#xff08;下落的速度会越来越快&#xff09; 可以进行试玩&#xff0c;手机玩起来效果会更好些。 点击…

Java就业前景如何?

Java还有出路吗&#xff1f;2023年的就业市场依然经历着面临挑战&#xff0c;很多有经验有技术的人被淘汰下来&#xff0c;而马上又有一千多万的新鲜血液涌入就业市场。经济大环境对于各行各业的影响是非常大的&#xff0c;也为IT行业的内卷推波助澜。在2023年想学习Java入行就…

面试造航母,入职拧螺丝,工资...

有粉丝跟我吐槽说&#xff1a;金三银四去面试软件测试岗&#xff0c;真的是面试造航母&#xff0c;入职拧螺丝&#xff0c;工资还低 这种现象很正常&#xff0c;因为找一个测试员&#xff0c;当然希望他能做的业务越多越好&#xff0c;最好像机器猫一样&#xff0c;啥事儿都能…

Chatgpt 实践经验分享

数据准备&#xff1a;ChatGPT 需要大量的训练数据来支撑模型的训练和优化&#xff0c;因此需要进行充分的数据准备。在数据准备方面&#xff0c;需要考虑数据的质量、覆盖范围以及数据的预处理方式等。模型训练&#xff1a;ChatGPT 使用端到端学习的方式训练模型&#xff0c;需…

自动控制原理模拟卷1

自动控制原理模拟题一 Question1 已知机械系统和电网络如下图所示,求解两个系统的传递函数,并证明这两个系统是相似系统. 解: 【图a系统】 由电网络原理图并根据复阻抗原理,可得系统传递函数为: E o ( s ) E i

离线安装k8s/kubernetesv1.17.1

条件&#xff1a; 3台没有网络的centos7.9服务器 1.系统优化 hostnamectl set-hostname k8s-master && bash #只在master节点上执行 hostnamectl set-hostname k8s-node1 && bash #只在node1节点上执行 hostnamectl set-hostname k8s-node2 && …

基于stm32单片机和rt-thread操作系统的智能灯

目 录 一、 总体概况 二、 各部分介绍 2.1 STM32F4开发板 2.2 光敏模块 2.3 麦克风模块 2.4 超声波模块 三、 RT-Thread介绍 四、 开发过程 五、 未来设想 六、 开发心得 总体概况 本次测试技术与信号处理课程作业&#xff0c;我利用了stm32单片机和rt-thread…

SpringBoot中使用WebSocket Demo

大概目录结构 依赖只引入了JSP 和SpringBoot整合WebSocket Spring Web index.jsp <% page contentType"text/html;charsetUTF-8" language"java" %> <!DOCTYPE html> <html> <head><meta charset"utf-8"><s…

STM32开发(十三)STM32F103 片内资源 —— 外部中断 按键 详解

文章目录一、基础知识点二、开发环境三、STM32CubeMX相关配置四、Vscode代码讲解五、结果演示一、基础知识点 外部中断/事件控制器主要特征&#xff1a; 每个中断/事件都有独立的触发和屏蔽每个中断线都有专用的状态位支持多达20个软件的中断/事件请求检测脉冲宽度低于APB2时…

校园一键报警柱的作用

校园一键报警柱是一种用于校园安全的紧急报警系统&#xff0c;可以随时随地向校园安全管理部门发送紧急警报。这种系统通常采用带有紧急按钮的电缆或无线警报装置&#xff0c;使学生、教师和工作人员可以在出现紧急情况时轻松报告安全问题&#xff0c;迅速地通知校园安全人员&a…

彻底理解java中泛型

一、什么是泛型&#xff1f; 泛型是JDK5引入的一种特性&#xff0c;是一种类型安全检测机制&#xff0c;开发者在编译阶段发现类型相关的报错。 泛型即参数类型化&#xff0c;将操作的数据类型定义为参数&#xff0c;可定义在类、接口、方法中。 可以把类型参数看作是使用参数化…

CorelDRAW2023中文版矢量制图及设计软件更新发布

矢量制图及设计软件&#xff0c;CorelDRAW Graphics Suite 2023中文版&#xff08;以下简称CorelDRAW 2023&#xff09;对新手来说&#xff0c;对于自己多久才能学会cdr软件这个问题是比较关心的。如果你的学习能力比较强&#xff0c;一周时间是有可能完全学会cdr的。但由于每个…