特殊文本文件日志技术重点笔记。

特殊文本文件,日志技术(黑马 一套入门 3h)

特殊文件

image-20240917164304185

日志技术

把程序运行的信息,记录到文件中,方便程序员定位bug,并了解程序的执行情况等。

1.为什么要用这些特殊文件
1.1存储单个用户的: 用户名,密码

image-20240917164431731

1.2存储多个用户的:用户名,密码,家乡,性别

image-20240917164846687

2 这些特殊文件,我们主要学什么
2.1 了解它们的特点,作用
2.2 学习使用程序读取它们里面的数据
2.3 学习使用程序把数据存储到这些文件里

Properties

image-20240917165600385

使用Properties读取属性文件里的键值对数据

构造器用于构建Properties集合对象(空容器)
public Properties()用于构建Properties集合对象(空容器)
常用方法说明
public void load(InputStream is)通过字节输入流,读取属性文件里的键值对数据
public void load(Reader reader)通过字符输入流,读取属性文件里的键值对数据
public String getProperty(String key)根据键获取值(其实就是get方法效果)
public Set stringPropertyNames()获取全部键的集合(其实就是ketSet()方法的效果)
public Object setProperty(String key, String value)保存键值对数据到Properties对象中去
public void store(OutputStream os, String comments)把键值对数据,通过字节输出流写出到属性文件里去
public void store(Writer w, String comments)把键值对数据,通过字符输出流写出到属性文件里去

XML(全称EXtensible Markup Language, 可扩展标记语言)

  • 本质是一种数据的格式,可以用来存储复杂的数据结构和数据关系。

1.XML

  • XML中的"<标签名>" 称为一个标签或一个元素,一般是成对出现的。
  • XML中的标签名可以自己定义(可扩展), 但必须要正确的嵌套
  • XML中只能有一个根标签
  • XML中的标签可以有属性。
  • 如果一个文件中放置的是XML格式的数据,这个文件就是XML文件**,后缀一般要写成.xml。**

2.XML的创建

  • 就是创建一个XML类型的文件,要求文件的后缀必须使用xml,如hello_world.xml
2.1IDEA创建XML文件

image-20240917173014138

3.XML的语法规则

  • XML文件的后缀名为:xml,文档声明必须是第一行

    <? xml version="1.0" encoding="UTF-8" ?>
    version: XML默认的版本号码,该属性是必须存在的
    encoding:XML文件的编码
    
  • XML中可以定义注释信息:

  • XML中书写 “<”, "&"等,可以会出现冲突,导致报错,此时可以用如下特殊字符替代。

image-20240917173805698

  • XML中可以写一个叫CDATA的数据区: <![CDTAT[ …内容… ]]>, 里面的内容可以随便写。

4.XML的作用和应用场景

  • 本质是一种数据格式,可以存储复杂的数据结构,和数据关系。
  • 应用场景: 经常用来做为系统的配置文件;或者作为一种特殊的数据结构,在网络中进行传输。

image-20240917174303902

5.解析XML文件

  • 使用程序读取XML文件中的数据

image-20240917174640362

5.1使用Dom4J解析出XML文件

需求:使用Dom4j把一个XML文件的数据进行解析

步骤:

1. 下载Dom4j框架,官网下载
1. 在项目中创建一个文件夹: lib
1. 将dom4j-2.1.3.jar文件复制到lib文件夹
1. 在jar文件上点右键,选择Add as Library->点击OK
1. 在类中导包使用
5.2DOM4J解析XML文件的思想: 文档对象模型

image-20240917175746758

  • SAXReader: Dom4j提供的解析器,可以认为是代表整个Dom4j框架
构造器/方法说明
public SAXReader()构建Dom4J的解析器对象
public Document read(String url)把XML文件读成Document对象
public Document read(InputStream is)通过字节输入流读取XMl文件
  • Document
方法名说明
Element getRootElement()获得根元素对象
  • Element提供的方法

image-20240917180651309

6.如何使用程序把数据写出到XML文件中去?

不建议用colm4J做。推荐直接把程序里的数据拼接成XML格式,然后用IO流写出去!!

6.1约束XML文件的编写[了解]
  • 就是限制XML文件只能按照某种格式进行书写。专门用来限制xml书写格式的文档,比如:限制标签,属性应该怎么写。

image-20240917190347137

6.2约束文档的分类(了解)
  • DTT文档

1:编写DTD约束文档,后缀必须是dtd

<!ElEMENT 书架(+)>
<!ElEMENT(书名,作者,售价)>
<!ElEMENT 书名(#PCDATA)>
<!ELEMENT 作者(#PCDATA)>
<!ELEMENT 售价(#PCDATA)>

2.在需要编写的XML文件中导入该DTD约束文档

3.然后XML文件, 就必须按照DTD约束文档指定的格式进行编写,否则报错!

[!warning]

可以约束XML文件的编写

不能约束具体的数据类型

  • Schema文档

需求: 利用schema文档约束,约束一个XML文件的编写

1: 编写schema约束文档,后缀必须是.xsd,具体的形式到代码中观看

2: 在需要编写的XML文件中导入该schema约束文档

3: 按照约束内容编写XML文件的标签

日志

问题

  • 希望系统能记住某些数据是被谁操作的,比如被谁删除了?
  • 想分析用户浏览系统的具体情况,以便挖掘用户的具体喜好?
  • 当系统在开发中或者上线后出现了bug,崩溃了,该通过什么去分析,定位bug?
  • 好比生活中的日记,可以纪录你生活中的点点滴滴。
  • 程序中的日志,通常就是一个文件,里面记录的是程序运行过程中的各种信息。
目前记录日志的方案
public static void test(String number)try {int resul t = Integer.parselnt(number);System.out.println("输入的数字为"+result);} catch (NumberFormatException e) {System.out.println("输入的数字有误,请输入一个整数");}
}
弊端
  • 日志会展示在控制台

  • 不能更方便的将日志记录到其他的位置(文件,数据库)

  • 想取消日志,需要修改源代码才可以完成

日志技术

  • 可以将系统执行的信息, 方便的记录到指定的位置(控制台,文件中,数据库中)。
  • 可以随时以开关的形式控制日志的启停,无需侵入到源代码中去进行修改。

日志技术的体系结构

image-20240917193726601

Logback日志框架官方网站:https://lobback.qos.ch/index.html
Logback日志框架有以下几个模块

image-20240917194156370

想使用Logback日志框架,至少需要在项目中整合如下三个模块:

image-20240917194302608

Logback快速入门

需求
  • 使用Logback日志框架,记录系统的运行信息。
实现步骤

1:导入Logback框架到项目中去。

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

3:创建Logback框架提供的Logger对象,然后用Logger对象调用其提供的方法就可以记录系统的日志信息。

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

[!warning]

对Logback日志框架的控制,都是通过其核心配置文件logback.xml来实现的。

核心配置文件logback.xml

概念:

对Logback日志框架进行控制的。

日志的输出位置,输出格式的设置。
  • 通常可以设置2个输出日志的位置: 一个是控制台,一个是系统文件中。
<appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender">
<appender name="FILE" clss="ch.qos.logback.core.rolling.RollingFileAppender">
开启日志(ALL),取消日志(OFF)
<root level="ALL"><appender-ref ref="CONSOLE"/><appender-ref ref="FILE" />
</root>
Logback设置日志级别
  • 日志级别指的是日志信息的类型,日志都会分级别,常见的日志级别如下(优先级依次升高):
日志级别说明
trace追踪,指明程序运行轨迹
debug调试,实际应用中一般将其作为最低级别,而trace则是很少使用
info输出重要的运行信息,数据连接,网络连接,IO操作等等,使用较多
warn警告信息,可能会发生问题,使用较多
error错误信息,使用较多
为什么要学习日志级别
<root level="info"><appender-ref ref="CONSOLE" /><appender-ref ref="FILE" /></root>
  • 只用日志级别是大于或等于核心配置文件配置的日志级别,才会被记录,否者不记录。

信息,可能会发生问题,使用较多 |
| error | 错误信息,使用较多 |

为什么要学习日志级别
<root level="info"><appender-ref ref="CONSOLE" /><appender-ref ref="FILE" /></root>
  • 只用日志级别是大于或等于核心配置文件配置的日志级别,才会被记录,否者不记录。

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

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

相关文章

数据清洗-缺失值填充-XGboost算法填充

目录 一、安装所需的python包二、采用XGboost算法进行缺失值填充2.1可直接运行代码2.2以某个缺失值数据进行实战2.2.1 代码运行过程截屏&#xff1a;2.2.2 填充后的数据截屏&#xff1a; 三、XGBoost算法原理介绍3.1 XGBoost 的定义3.2 XGBoost 的核心思想3.3 XGBoost 的特点3.…

2024 批量下载知乎回答/文章/想法/专栏/视频/收藏夹,导出 excel 和 pdf

之前分享过文章 2024批量下载知乎回答文章想法专栏收藏夹&#xff0c;公众号文章内容图片封面视频音频&#xff0c;微博内容图片视频评论转发数据&#xff0c;导出excel和pdf &#xff0c;今天再整理分享下知乎知乎回答/文章/想法/专栏/视频/收藏夹下载。 苏生不惑 这个账号已…

Jenkins基于tag的构建

文章目录 Jenkins参数化构建设置设置gitlab tag在工程中维护构建的版本按指定tag的版本启动服务 Jenkins参数化构建设置 选择参数化构建&#xff1a; 在gradle构建之前&#xff0c;增加执行shell的步骤&#xff1a; 把新增的shell框挪到gradle构建之前&#xff0c; 最后保存 …

驱动器磁盘未格式化难题:深度剖析与恢复实践

驱动器磁盘未格式化的深层探索 在数据存储与管理的日常中&#xff0c;驱动器作为我们数字生活的基石&#xff0c;其稳定性直接关系到数据的安全与可用性。然而&#xff0c;当屏幕上赫然出现“驱动器中的磁盘未被格式化”的提示时&#xff0c;许多用户往往感到手足无措&#xf…

Linux 文件与目录操作命令详解

文章目录 前言创建文件1. touch2. vim 文件内容显示3. cat4. more5. less6. head7. tail 文件&#xff08;目录&#xff09;复制、删除和移动8. cp9. rm10. mv 压缩文件与解压缩11. gzip12. zip 和 unzip 创建目录13. mkdir 删除目录14. rmdir 改变工作目录15. cd16. pwd 显示目…

【C语言】联合体枚举的讲解

目录 ✨声明&#xff01;&#xff01;&#xff01;&#xff1a; 联合体与结构体只有一个区别&#xff0c;那就是内存存储方式不同 &#x1f495;1.联合体的声明 &#x1f495;2.联合体内存的存储 &#x1f495;3.联合体字节大小的计算 例题2&#xff1a; ✨4.枚举的声明…

全面掌握 Jest:从零开始的测试指南(下篇)

在上一篇测试指南中&#xff0c;我们介绍了Jest 的背景、如何初始化项目、常用的匹配器语法以及钩子函数的使用。这一篇篇将继续深入探讨 Jest 的高级特性&#xff0c;包括 Mock 函数、异步请求的处理、Mock 请求的模拟、类的模拟以及定时器的模拟、snapshot 的使用。通过这些技…

list从0到1的突破

目录 前言 1.list的介绍 2.list的常见接口 2.1 构造函数&#xff08; (constructor)&#xff09; 接口说明 2.2 list iterator 的使用 2.3 list capacity 2.4 list element access 2.5 list modifiers 3.list的迭代器失效 附整套练习源码 结束语 前言 前面我们学习…

一款源码阅读的插件

文章目录 进度汇报功能预览添加高亮标记高亮风格设置笔记颜色设置数据概览高亮数据详情 结尾 进度汇报 之前提到最近有在开发一个源码阅读的IDEA插件&#xff0c;第一版已经开发完上传插件市场了&#xff0c;等官方审批通过就可以尝鲜了。插件名称&#xff1a;Mark source cod…

防火墙——NAT

目录 NAT NAT分类 旧分类 新分类 NAT配置 源NAT​编辑 配置源NAT地址池​编辑 关于源NAT环路问题 环境如下​编辑 防火墙nat​编辑​编辑 路由器要配置指向11.0.0.0 网段的静态路由​编辑 测试​编辑 如果此时有外网用户直接pingNAT地址&#xff0c;则环路出现。​…

PAT甲级-1016 Phone Bills

题目 题目大意 顾客打长途电话计费&#xff0c;输出每月的账单。输入一行给出一天24小时的计费钱数&#xff0c;注意单位是美分&#xff0c;还要乘以0.01。接下来给出n条记录&#xff0c;每条记录都包括客户名&#xff0c;时间&#xff0c;状态。“on-line”是开始打电话的时间…

专题四_位运算( >> , << , , | , ^ )_算法详细总结

目录 位运算 常见位运算总结 1.基础位运算 2.给一个数 n ,确定它的二进制表示中的第 x 位是 0 还是 1 3.运算符的优先级 4.将一个数 n 的二进制表示的第 x 位修改成 1 5.将一个数n的二进制表示的第x位修改成0 6.位图的思想 7.提取一个数&#xff08;n&#xff09;二进…

如何优雅地处理返回值

我们已经知道了如何优雅的校验传入的参数了&#xff0c;那么后端服务器如何实现把数据返回给前端呢&#xff1f; 返回格式 后端返回给前端我们一般用 JSON 体方式&#xff0c;定义如下&#xff1a; {#返回状态码code:string, #返回信息描述message:string,#返回值data…

算法设计与分析(线性时间选择算法

目录 线性时间选择算法&#xff08;QuickSelect&#xff09;实现注意事项有可能出现的特殊情况&#xff1a;小结&#xff1a; 线性时间选择算法&#xff08;QuickSelect&#xff09;实现 线性时间选择算法 是快速排序算法的一个变种&#xff0c;用于在未完全排序的数组中找到第…

Next-ViT: 下一代视觉Transformer,用于现实工业场景中的高效部署

摘要 由于复杂的注意力机制和模型设计&#xff0c;大多数现有的视觉Transformer&#xff08;ViTs&#xff09;在实际的工业部署场景中&#xff0c;如TensorRT和CoreML&#xff0c;无法像卷积神经网络&#xff08;CNNs&#xff09;那样高效运行。这提出了一个明显的挑战&#x…

[Redis] Redis中的set和zset类型

&#x1f338;个人主页:https://blog.csdn.net/2301_80050796?spm1000.2115.3001.5343 &#x1f3f5;️热门专栏: &#x1f9ca; Java基本语法(97平均质量分)https://blog.csdn.net/2301_80050796/category_12615970.html?spm1001.2014.3001.5482 &#x1f355; Collection与…

微信,手机文件管理,通过自己软件打开——手机平板电脑编程———未来之窗行业应用跨平台架构

一、手机平板IT人员编程编辑器 专为 IT 和运维人员设计的手机和平板编程编辑器&#xff0c;具有便携灵活、即时响应、适应多场景、触控便捷、资源丰富、成本较低、激发创意和数据同步方便等优点。 二、手机平板现状 目前手机和平板的现状是缺乏专门针对 IT 人员的编辑工具&a…

避免服务器安装多个mysql引起冲突的安装方法

最近工作中涉及到了数据迁移的工作. 需要升级mysql版本到8.4.2为了避免升级后服务出现异常, 因此需要保留原来的mysql,所以会出现一台服务器上运行两个mysql的情况 mysql并不陌生, 但是安装不当很容易引起服务配置文件的冲突,导致服务不可用, 今天就来介绍一种可以完美避免冲突…

COMDEL电源CX2500S RF13.56MHZ RF GENERATOR手侧

COMDEL电源CX2500S RF13.56MHZ RF GENERATOR手侧

【C++ Primer Plus习题】16.4

大家好,这里是国中之林! ❥前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到网站。有兴趣的可以点点进去看看← 问题: 解答: main.cpp #include <iostream> #include <list> using …