Java学习路线(17)——日志框架

news2024/12/25 2:35:03

一、日志技术概述
(1)概念: 日志是一种将系统运行信息封装至文件的一种记录载体。
(2)优势:

输出语句日志技术
输出位置只能是控制台文件或数据库
取消日志需要修改代码达成无需修改代码
多线程性能较差性能较好

二、日志技术体系结构

日志接口规范图
日志接口规范图
常见日志实现框架

  • log4j
  • JUL(java.util.logging)
  • Logback(基于slf4j)

三、Logback框架

(1)框架概述
(a)Logback是由log4j创始人设计的另一个开源日志组件,性能优于log4j。
(b)官网:https://logback.qos.ch/
(c)三大技术模块

  • logback-core:核心基础模块
  • logback-classic:log4j的改良版本,完整兼容slf4j API
  • logback-access:集成web服务器,提供HTTP访问日志功能

(2)框架入门

  • 创建lib包加载jar包
    在这里插入图片描述
  • logback核心配置文件logback.xml编写在src目录下
    logback.xml
<?xml version="1.0" encoding="UTF-8" ?>
<configuration>
    <!-- CONSOLE :表示当前的日志信息是可以输出到控制台的。 -->
    <appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender">
        <!--输出流对象 默认 System.out 改为 System.err-->
        <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>
        <!--日志输出路径-->
        <file>D:/JavaBase/JavaSEpro/log/data.log</file>
        <!--指定日志文件拆分和压缩规则-->
        <rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
            <!--通过指定压缩文件名称,来确定分割文件方式-->
            <fileNamePattern>D:/JavaBase/JavaSEpro/log/log-%d{yyyy-MM-dd}.log%i.gz</fileNamePattern>
            <!--文件拆分大小-->
            <maxFileSize>1MB</maxFileSize>
        </rollingPolicy>
    </appender>

    <!--
    level:用来设置打印级别,大小写无关:TRACE, DEBUG, INFO, WARN, ERROR    |    ALL 和 OFF
   , 默认debug
    <root>可以包含零个或多个<appender-ref>元素,标识这个输出位置将会被本日志级别控制。
    -->
    <root level="ALL">
        <!-- 注意:如果这里不配置关联打印位置,该位置将不会记录日志-->
        <appender-ref ref = "CONSOLE"/>
        <appender-ref ref="FILE" />
    </root>

</configuration>
  • 获取文件日志类
	import org.slf4j.Logger;
	import org.slf4j.LoggerFactory;
	
    public static final Logger LOGGER = LoggerFactory.getLogger("Test.class");
  • 使用打印日志
LOGGER.debug("main执行了");
LOGGER.info("记录第二行日志");

try {
	System.out.println(1/0);
}catch (Exception e){
	e.printStackTrace();
	LOGGER.error("功能出现异常" + e);
}

/*控制台输出*/
2023-05-29 18:11:14.146 [DEBUG]  Test.class [main] : main执行了
2023-05-29 18:11:14.148 [INFO ]  Test.class [main] : 记录第二行日志
2023-05-29 18:11:14.155 [ERROR]  Test.class [main] : 功能出现异常java.lang.ArithmeticException: / by zero
java.lang.ArithmeticException: / by zero
at com.zengoo.logback.Test.main(Test.java:19)

/*文件中的日志信息*/
2023-05-29 18:11:14.146 [main] DEBUG Test.class - main执行了
2023-05-29 18:11:14.148 [main] INFO  Test.class - 记录第二行日志
2023-05-29 18:11:14.155 [main] ERROR Test.class - 功能出现异常java.lang.ArithmeticException: / by zero

(3)框架详解

  • 输出位置

通常日志输出有两个位置:控制台和系统文件

(a)输出到控制台配置

<!-- CONSOLE :表示当前的日志信息是可以输出到控制台的。 -->
    <appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender">
        <!--输出流对象 默认 System.out 改为 System.err-->
        <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>

(b)输出到系统文件配置

<!-- 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>
        <!--日志输出路径-->
        <file>D:/JavaBase/JavaSEpro/log/data.log</file>
        <!--指定日志文件拆分和压缩规则-->
        <rollingPolicy
                class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
            <!--通过指定压缩文件名称,来确定分割文件方式-->
            <fileNamePattern>D:/JavaBase/JavaSEpro/log/log-%d{yyyy-MM-dd}.log%i.gz</fileNamePattern>
            <!--文件拆分大小-->
            <maxFileSize>1MB</maxFileSize>
        </rollingPolicy>
    </appender>
  • 格式设置
<!--格式化输出:%d表示日期,%thread表示线程名,%-5level:级别从左显示5个字符宽度 %msg:日志消息,%n是换行符-->
<encoder>
	<pattern>输出格式</pattern>
</encoder>
  • 日志级别设置
<!--
    level:用来设置打印级别,大小写无关:TRACE, DEBUG, INFO, WARN, ERROR    |    ALL 和 OFF
   , 默认debug
    <root>可以包含零个或多个<appender-ref>元素,标识这个输出位置将会被本日志级别控制。
    -->
    <root level="ALL">
        <!-- 注意:如果这里不配置关联打印位置,该位置将不会记录日志-->
        <appender-ref ref="CONSOLE"/>
	</root>
	<root level="ERROR">
        <!-- 注意:如果这里不配置关联打印位置,该位置将不会记录日志-->
        <appender-ref ref="FILE" />
	</root>
	

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

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

相关文章

AcrelEMS企业微电网能效管理系统-强化电力需求侧管理,缓解电力系统峰值压力

摘要 近年来全国用电负荷特别是居民用电负荷的快速增长&#xff0c;全国范围内夏季、冬季用电负荷“双峰”特征日益突出&#xff0c;极端气候现象多发增加了电力安全供应的压力。具有随机性、波动性、间歇性特征的可再生能源大规模接入电网对电力系统的稳定性带来新的挑战&…

财务共享服务中心建设流程是什么样的?

财务共享是当今众多企业在数智化转型道路上的首选模式&#xff0c;财务共享服务中心由于具备“标准化、流程化、资源共享、信息化”的特点&#xff0c;一改传统财务分散的运作模式&#xff0c;将资源集中共享&#xff0c;大大提升了财务管理效率&#xff0c;也为企业管理打下良…

Loki安装使用方式

Distributor 收到 HTTP 请求&#xff0c;用于存储流数据 通过 hash 环对数据流进行 hash Distributor将数据流发送到对应的Ingester及其副本上 Ingester 新建 Chunk 或将数据追加到已有Chunk 上 Distributor通过 HTTP连接发送响应信息 Loki 日志系统由以下3个部分组成&#xf…

每日一题——删除字符串中的所有相邻重复项

每日一题 删除字符串中的所有相邻重复项 题目链接 思路 这是一道用栈解决的典型题目 我们先来看看栈的基本性质&#xff1a; 栈&#xff1a;是一种特殊的线性表&#xff0c;其只允许在固定的一端进行插入和删除元素的操作。进行数据插入和删除操作的一端称为栈顶&#xff0c…

解决Github上传或者下载时失败的问题

总是出现push不到GitHub的问题, 这里来记录一下每次的解决方法 文章目录 2023年05月28日出现问题2023年05月28日再次出现问题2023年05月29日出现问题 2023年05月28日出现问题 push代码时出现如下图所示的错误 Failed to connect to 127.0.0.1 port 1080 after 2052 ms: Conne…

08.Stack和Queue

栈&#xff1a;先进后出 队列&#xff1a;先进先出 JVM的栈就是平常所说的一块内存。 此处所说的栈是数据结构 1. 栈(Stack) 1.1 概念 栈&#xff1a;一种特殊的线性表&#xff0c;其只允许在固定的一端进行插入和删除元素操作。进行数据插入和删除操作的一端称为栈 顶&…

迪赛智慧数——柱状图(基本柱状图):全国美食类门店TOP10地区

效果图 中国“最会吃”的省份&#xff0c;广东榜上有名&#xff0c;看看有你的家乡吗? 广东美食门店开店数量保持较好状态&#xff0c;重庆、上海、北京、天津开店率在5%以上。广东拥有众多的美食文化&#xff0c;美食门店数量也是全国最多的省份有99万家美食门店&#xff0c…

SpringBoot SSE服务端主动推送事件详解

一、SSE概述 1、SSE简介 SSE(Server Sent Event)&#xff0c;直译为服务器发送事件&#xff0c;也就是服务器主动发送事件&#xff0c;客户端可以获取到服务器发送的事件。 我们常见的 http 交互方式是客户端发起请求&#xff0c;服务端响应&#xff0c;然后一次请求完毕。但是…

Centos 7安装python 3.9.10

概述 Python是一种高级编程语言&#xff0c;它具有简单易学、可读性强、代码简洁等特点。Python由Guido van Rossum于1991年创造&#xff0c;最初被用作一种教学语言&#xff0c;但现在已经成为一种通用的编程语言。 Python支持多种编程范式&#xff0c;包括面向对象编程、函数…

如何运用R语言进行Meta分析在【文献计量分析、贝叶斯、机器学习等】多技术的融合

Meta分析是针对某一科研问题&#xff0c;根据明确的搜索策略、选择筛选文献标准、采用严格的评价方法&#xff0c;对来源不同的研究成果进行收集、合并及定量统计分析的方法&#xff0c;最早出现于“循证医学”&#xff0c;现已广泛应用于农林生态&#xff0c;资源环境等方面。…

【MySQL】MySql的底层数据结构

文章目录 前言索引结构及查找算法不适合做MySql的数据结构及其原因 一、BTree和BTree的引出1.1 BTree数据结构2.2 BTree数据结构 二、计算m阶&#xff0c;即BTree该取多少合适总结 前言 索引结构及查找算法 一个sql语句在mysql里究竟是如何运行的呢&#xff1f;又是怎么去查找…

如何在Linux系统中使用SCP命令传输文件和文件夹?

在Linux系统中&#xff0c;SCP&#xff08;Secure Copy&#xff09;是一种用于在本地和远程主机之间安全传输文件和文件夹的命令行工具。它基于SSH协议&#xff0c;并提供了加密和身份验证机制&#xff0c;确保数据的安全性和完整性。 本文将详细介绍如何使用SCP命令在Linux系统…

如何通过pytest进行更改自动化测试用例的执行顺序?

前言 在自动化测试中&#xff0c;自动化测试用例设计原则就是执行过程时不能存在依赖顺序&#xff0c;那么如果测试用例需要按照指定顺序执行&#xff0c;这个时候应该怎么做呢&#xff1f;目前单元测试框架中unittest没有办法改变测试用例的执行顺序&#xff0c;但是另一个单…

北京发布Web3.0白皮书!币圈扬言:国际金融格局即将重塑!

如今&#xff0c;虚拟资产已成为香港数字经济与金融创新的“桥头堡”。随着加密新政生效在即&#xff0c;市场暗流涌动&#xff0c;头部交易所争相布局&#xff0c;香港或将迎来新一轮的加密竞争。 多家交易所进军香港 5月28日&#xff0c;欧易&#xff08;OKX&#xff09;完成…

浅谈兼容性测试点和注意项

一&#xff1a;兼容性测试的概念&#xff1a;就是验证开发出来的程序在特定的运行环境中与特定的软件、硬件或数据相组合是否能正常运行、有无异常的测试过程。 二&#xff1a;兼容性测试的分类&#xff1a; &#xff08;1&#xff09;浏览器兼容性测试 指的是在浏览器上检…

one-stage目标检测方法

YOLO系列算法 从区域推荐到端到端 RCNN系列的方法和核心思想在于&#xff1a;先找出可能存在物体的区域&#xff0c;再确认物体的存在 这种思路归根溯源&#xff0c;来自传统的目标检测算法。 为了解决传统方法中的滑动窗口的方式&#xff0c;来找出可能存在目标的区域&…

自学软件测试到什么程度才可以去找工作...拿到阿里offer后才知道有这些就够了!!

如果是纯自学&#xff0c;建议先自学软件测试基础、功能测试等&#xff0c;然后找一个相关的工作&#xff0c;在工作中&#xff0c;边增长项目经验&#xff0c;边自学更难一点的自动化编程、性能测试等。自动化测试、性能测试如果没有老师带&#xff0c;自学的难度比较大&#…

uniapp 使用自定义icon图标

1.下载图标文件 阿里图标库位置&#xff1a;iconfont-阿里巴巴矢量图标库 eg: 搜索 “书签” 图标&#xff0c;点击加入购物车&#xff0c;再进入购物车&#xff0c;填写加入项目&#xff0c;也可以直接下载&#xff0c;点击编辑 编辑可以设置图片颜色&#xff0c;或像素大小…

immutable深拷贝:数据多层属性-不可变数据结构

一、为何要用immutable深拷贝&#xff1f; 1.浅拷贝&#xff08;浅复制&#xff09; //引用赋值-浅复制、浅拷贝 var obj{name:"溜溜球"}var obj2obj;obj2.name"刘刘球";console.log(obj);//name:"刘刘球"console.log(obj2);//name:"刘刘…

[C++][opencv]opencv填充透明色到不规则polygon区域

大家用yolov5-seg分割都知道官方演示分割结果会把分割区域半透明填充到原图里面&#xff0c;那么C如何实现呢。今天特地研究了下。由于分割点是变动的&#xff0c;所以我们需要用变量控制分割点数。 参考文章写的很不错&#xff0c;但是有个毛病&#xff0c;他这个是5点必须是…