思维导图

✅ 一、配置文件相关
1. Properties 文件(.properties)
-
本质:Map 键值对集合,用于存储系统配置。
-
使用步骤:
-
创建
Properties对象; -
调用
load()方法加载文件(支持字节流/字符流); -
使用
getProperty(key)获取值。
-
-
注意事项:
-
文件编码需为 UTF-8(避免中文乱码);
-
框架(如 Spring)会自动读取该类配置文件。
-
2. XML 文件(.xml)
-
本质:可扩展标记语言,适合表示复杂结构和关系。
-
语法规则:
-
必须有一个根标签;
-
标签成对出现,正确嵌套;
-
特殊字符需转义(如
<表示<); -
支持注释:
<!-- 注释内容 -->。
-
-
应用场景:
-
程序/框架配置文件;
-
网络数据传输载体。
-
-
解析方式:
-
无需手动解析,使用开源库如 Dom4j;
-
-
约束机制:
-
DTD:约束标签结构,但不能约束数据类型;
-
Schema(.xsd):功能更强,支持数据类型约束;
-
使用时需在 XML 中引入约束文档。
-
✅ 二、日志技术相关
1. 日志基础
-
定义:程序运行过程中产生的信息(数据);
-
输出方式:控制台、文件、数据库等;
-
常用框架:Logback(基于 SLF4J 接口实现)。
2. Logback 使用
-
所需 jar 包(3个):
-
slf4j-api:日志接口; -
logback-core:基础模块; -
logback-classic:功能模块,实现 SLF4J。
-
-
使用步骤:
-
导入 jar 包;
-
创建 Logger 对象(可用
@Slf4j注解简化); -
调用日志方法(如
log.info(...))。
-
3. 日志级别(由低到高)
| 级别 | 用途说明 |
|---|---|
| trace | 追踪程序运行轨迹,开发中很少用 |
| debug | 开发调试阶段使用,线上禁止 |
| info | 输出重要运行信息(如连接成功),使用频繁 |
| warn | 警告信息,可能不影响运行 |
| error | 错误和异常信息,必须记录 |
| all | 输出所有日志 |
| off | 关闭日志输出 |
-
控制机制:
-
只有日志级别 ≥ 配置文件中设定的级别时,才会被记录;
-
通过
logback.xml配置日志行为(必须放在src目录,文件名固定)。
-
✅ 总结一句话:
Properties 存配置,XML 能结构,Logback 管日志,级别要记牢。
练习一.properties
package com.itheima.d2_properties;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
import java.util.Properties;
/**
* @author Administrator
* todo 新建properties属性文件,需要在设置中改一下文件编码,确保文件是utf-8编码,项目编码:<系统默认:GBK>
* 作为项目配置文件,框架运行时会自动读取
*/ //目标:掌握读取properties文件中的数据
public class Demo {
public static void main(String[] args) throws IOException {
/*
Properties代表的是一个属性文件,可以把自己对象中的键值对信息存入到一个属性文件中去
属性文件:后缀是.properties结尾的文件,里面的内容都是 key=value,后续做系统配置信息的
api:
load(InputStream inStream):从输入字节流读取属性列表(键和元素对)
load(Reader reader):从输入字符流读取属性列表(键和元素对)
String getProperty(String key):使用此属性列表中指定的键搜索属性值 (get)
*/
//1.创建Properties对象
Properties properties = new Properties();
//2.调用load方法,把属性文件加载到Properties对象中
properties.load(new FileReader("day07-io-properties-xml-logback\\student.properties"));
String name = properties.getProperty("username");
String age = properties.getProperty("age");
String address = properties.getProperty("address");
//3.调用getProperty方法,获取属性值
System.out.println(name+" "+age+" "+address+" ");
}
}
练习二.xml
package com.itheima.d3_xml;
import org.dom4j.Attribute;
import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.Element;
import org.dom4j.io.SAXReader;
import org.xml.sax.SAXException;
import java.util.List;
//目标:掌握使用dom4j解析xml文件的api
public class Demo02 {
public static void main(String[] args) throws DocumentException{
/*
dom4j获取解析器、Document文档、根标签对象的API:
public SAXReader():创建Dom4j的解析器对象
Document read(String url):加载xml文件成为Document对象
Element getRootElement():获得根元素对象
dom4j解析xml标签、属性、文本的API:
List<Element> elements():得到当前元素下所有子元素
List<Element> elements(String name):得到当前元素下指定名字的子元素返回集合
Element element(String name):得到当前元素下指定名字的子元素,如果有很多名字相同的返回第一个
String getName():得到元素名字
String attributeValue(String name):通过属性名直接得到属性值
String elementText(子元素名):得到指定名称的子元素的文本
String getText():得到文本
*/
//创建SaxReader解析器对象
/* SAXReader saxReader = new SAXReader();
//调用read方法,读文件,得到Document文档对象
Document document = saxReader.read("day07-io-properties-xml-logback\\students.xml");
//从文档对象中获取根标签对象<students>
Element rootElement = document.getRootElement();
System.out.println(rootElement);
//获取根标签下的所有子标签
List<Element> students = rootElement.elements("student");
//遍历<student>对象,获取他的属性值以及子标签内容
for (Element student : students) {
//获取id属性值
String id = student.attributeValue("id");
//获取子标签name的文本内容
String name = student.elementText("name");
String age = student.elementText("age");
String address = student.elementText("address");
System.out.println(id+" "+name+" "+age+" "+address);
}*/
SAXReader saxReader = new SAXReader();
Document document = saxReader.read("day07-io-properties-xml-logback\\students.xml");
Element rootElement = document.getRootElement();
List<Element> students = rootElement.elements("student");
for (Element student : students) {
String id = student.attributeValue("id");
String age = student.elementText("age");
String sex = student.elementText("sex");
String name = student.elementText("name");
String address = student.elementText("address");
System.out.println( id+" "+name+" "+age+" "+sex+" "+address);
}
}
}
练习三.logback
配置文件可以上网搜
<?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个字符宽度,
%c:哪个类输出的日志,%msg:日志消息,%n是换行符-->
<pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] [%-5level] %c : %msg%n</pattern>
</encoder>
</appender>
<!-- File是输出的方向通向文件的 -->
<appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
<encoder>
<!--%logger{36}和上述%c作用一样-->
<pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n</pattern>
<charset>utf-8</charset>
</encoder>
<!--日志输出路径-->
<file>day07-io-properties-xml-logback/log/itheima-data.log</file>
<!--指定日志文件拆分和压缩规则-->
<rollingPolicy
class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
<!--通过指定压缩文件名称,来确定分割文件方式-->
<fileNamePattern>day07-io-properties-xml-logback/log/itheima-data-%d{yyyy-MM-dd}-%i.log.zip</fileNamePattern>
<!--文件拆分大小-->
<maxFileSize>100KB</maxFileSize>
</rollingPolicy>
</appender>
<!--
level:用来设置打印级别,大小写无关:TRACE, DEBUG, INFO, WARN, ERROR, ALL 和 OFF
<root>可以包含零个或多个<appender-ref>元素,标识这个输出位置将会被本日志级别控制。
-->
<root level="info">
<appender-ref ref="CONSOLE"/>
<appender-ref ref="FILE" />
</root>
</configuration>
实现:
package com.itheima.d4_logback;
import lombok.extern.slf4j.Slf4j;
/*
级别程度排序:TRACE< DEBUG< INFO< WARN< ERROR
默认级别是debug(忽略大小写)
级别作用:控制系统中哪些日志级别是可以输出的
只输出级别不低于设定级别的日志信息
使用方式:在root标签中的level属性中配置
ALL:打开全部日志信息
OFF:关闭全部日志信息
*/
@Slf4j
//todo logback.xml日志个性化配置,可用于打印日志信息类型和日志文件输出
public class Demo02 {
public static void main(String[] args) {
log.trace("trace级别日志");
log.debug("debug级别日志");
log.info("info级别日志");
log.warn("warn级别日志");
log.error("error级别日志");
}
}
好累...好想吃红烧鸡翅

被折叠的 条评论
为什么被折叠?



