点我
日志技术
特殊文件-properties文件
特点
- 只能是键值对
- 键是不能重复的
- 文件后缀一般为.properties结尾
概述
- properties是一个Map集合(键值对集合),但是一般不会当集合进行使用
- 核心的作用:用来代表属性文件,通过proerties进行读写属性文件里的内容
properties读取属性文件中的键值对数据
构造器 | 说明 |
---|---|
public Properties() | 用于构建Properties集合对象(空容器) |
常用方法 | 说明 |
---|---|
public void load(InputStream is) | 通过字节输入流,读取属性文件里的键值对数据 |
public void load(Reader reader) | 通过字符输入流,读取属性文件里的键值对数据 |
public String getProperty(String key) | 根据键获取值(其实就是get方法的效果) |
public Set | 获取全部键的集合(其实就是ketSet方法的效果) |
properties将键值对数据写出到属性文件中
构造器 | 说明 |
---|---|
public Properties() | 用于构建Properties集合对象(空容器) |
常用方法 | 说明 |
---|---|
public Object setProperty(String key, String value) | 保存键值对数据到Properties对象中去。 |
public void store(OutputStream os, String comments) | 把键值对数据,通过字节输出流写出到属性文件里去 |
public void store(Writer w, String comments) | 把键值对数据,通过字符输出流写出到属性文件里去 |
总结
可以存储properties属性集的键值对数据到属性文件中,void store(Writer writer,String comments)
可以加载属性文件中的数据到properties对象中来,void load(Reader reader)
demo
从文件中读取
package com.itheima.d1_properties;
import java.io.FileReader;
import java.util.Properties;
import java.util.Set;
/**
* 目标:掌握使用Properties类读取属性文件中的键值对信息。
*/
public class PropertiesTest1 {
public static void main(String[] args) throws Exception {
// 1、创建一个Properties的对象出来(键值对集合,空容器)
Properties properties = new Properties();
System.out.println(properties);
// 2、开始加载属性文件中的键值对数据到properties对象中去
properties.load(new FileReader("properties-xml-log-app\\src\\users.properties"));
System.out.println(properties);
// 3、根据键取值
System.out.println(properties.getProperty("赵敏"));
System.out.println(properties.getProperty("张无忌"));
// 4、遍历全部的键和值。
Set<String> keys = properties.stringPropertyNames();
for (String key : keys) {
String value = properties.getProperty(key);
System.out.println(key + "---->" + value);
}
properties.forEach((k, v) -> {
System.out.println(k + "---->" + v);
});
}
}
写入到文件中去
package com.itheima.d1_properties;
import java.io.FileWriter;
import java.util.Properties;
/**
* 目标:掌握把键值对数据存入到属性文件中去
*/
public class PropertiesTest2 {
public static void main(String[] args) throws Exception {
// 1、创建Properties对象出来,先用它存储一些键值对数据
Properties properties = new Properties();
properties.setProperty("张无忌", "minmin");
properties.setProperty("殷素素", "cuishan");
properties.setProperty("张翠山", "susu");
// 2、把properties对象中的键值对数据存入到属性文件中去
properties.store(new FileWriter("properties-xml-log-app/src/users2.properties")
, "i saved many users!");
}
}
XML
概述
- 一种数据的格式,用于存储复杂的数据结构和数据关系
特点
- XML中的“<标签名>” 称为一个标签或一个元素,一般是成对出现的。
- XML中的标签名可以自己定义(可扩展),但必须要正确的嵌套。
- XML中只能有一个根标签。
- XML中的标签可以有属性。
- 如果一个文件中放置的是XML格式的数据,这个文件就是XML文件,后缀一般要写成.xml。
语法规则
XML文件的后缀名为:xml,文档声明必须是第一行
<?xml version="1.0" encoding="UTF-8" ?>
version:XML默认的版本号码、该属性是必须存在的
encoding:本XML文件的编码
XML中可以定义注释信息:<!–- 注释内容 -->
XML中书写”<”、“&”等,可能会出现冲突,导致报错,此时可以用如下特殊字符替代。
< < 小于
> > 大于
& & 和号
' ' 单引号
" " 引号
应用场景
- 作为系统的配置文件或者作为一种特殊的数据结构,在网络中进行传输
Dom4j解析xml
解析方法
- SAXReader:Dom4j提供的解析器,可以认为是代表整个Dom4j框架
构造器方法 | 说明 |
---|---|
public SAXReader() | 构建Dom4J的解析器对象 |
public Document read(String url) | 把XML文件读成Document对象 |
public Document read(InputStream is) | 通过字节输入流读取XML文件 |
Document
方法名 说明 Element getRootElement() 获得根元素对象
- Element提供的方法
方法名 | 说明 |
---|---|
public String getName() | 得到元素名字 |
public List\<Element> elements() | 得到当前元素下所有子元素 |
public List\<Element> elements(String name) | 得到当前元素下指定名字的子元素返回集合 |
public Element element(String name) | 得到当前元素下指定名字的子元素,如果有很多名字相同的返回第一个 |
public String attributeValue(String name) | 通过属性名直接得到属性值 |
public String elementText(子元素名) | 得到指定名称的子元素的文本 |
public String getText() | 得到文本 |
demo
package com.xbxaq.xml_;
import com.sun.xml.internal.fastinfoset.tools.StAX2SAXReader;
import org.dom4j.Attribute;
import org.dom4j.Document;
import org.dom4j.Element;
import org.dom4j.io.SAXReader;
import org.xml.sax.SAXException;
import java.util.List;
public class Dom4jTest {
public static void main(String[] args) throws Exception {
//1、创建一个DOM4j框架提供的解析对象
SAXReader saxReader = new SAXReader();
//2 使用对象把需要解析的xml文件读成document对象
Document document = saxReader.read("src/com/xbxaq/xml_/helloworld.xml");
//3 从文档对象中解析XML文件的全部数据 获取根元素
Element root = document.getRootElement();
System.out.println(root.getName());
// 4 获取根元素下的全部一级子元素
List<Element> elements = root.elements("user");
for (Element element : elements){
System.out.println(element.getName());
}
//5 获取当前元素下的某个子元素
Element people = root.element("people");
System.out.println(people.getText());
Element user = root.element("user");
System.out.println(user.elementText("name"));
// 6、获取元素的属性信息呢?
System.out.println(user.attributeValue("id"));
Attribute id = user.attribute("id");
System.out.println(id.getName());
System.out.println(id.getValue());
List<Attribute> attributes = user.attributes();
for (Attribute attribute : attributes) {
System.out.println(attribute.getName() + "=" + attribute.getValue());
}
// 7、如何获取全部的文本内容:获取当前元素下的子元素文本值
System.out.println(user.elementText("name"));
System.out.println(user.elementText("地址"));
System.out.println(user.elementTextTrim("地址")); // 取出文本去除前后空格
System.out.println(user.elementText("password"));
Element data = user.element("data");
System.out.println(data.getText());
System.out.println(data.getTextTrim()); // 取出文本去除前后空格
}
}
日志
- 程序中的日志,通常就是一个文件,里面记录的是程序运行过程中的各种信息。
日志技术
- 可以将系统执行的信息,方便的记录到指定的位置(控制台、文件中、数据库)
- 可以随时以开关的形式控制日志的启停,无需侵入到源代码中去进行修改
日志的体系结构
- 日志框架:大佬或者第三方公司已经实现好的代码,后来者直接拿来使用即可
- 日志接口:设计日志框架的一套标准,日志框架需要实现这些接口
对Commons Logging接口不满意,有人就搞了SLF4J;因为对Log4j的性能不满意,有人就搞了Logback。
Logback是基于slf4j的日志规范实现的框架
logback日志框架
logback日志框架有以下几个板块
- logback-core:基础模板,是其他两个模板依赖的基础
- logback-classic:完整实现了slf4j API的模板
- logback-access:与tomcat、jetty等servlet容器集成,以提供http访问日志的功能
如果想要使用logback日志框架,至少需要在项目中整合三个模块:slf4j-API(日志接口),logback-core,logback-classic
快速入门实现步骤
1、将logback框架复制到项目的lib目录中
slf4j-API(日志接口),logback-core,logback-classic
2、将logback框架的核心配置文件logback.xml直接拷贝到src目录下
3、创建logback框架提供的logger对象,然后用logger对象调用其提供的方法就可以记录系统的日志信息了
public static final Logger LOGGER = LoggerFactory.getLogger(“类名");
demo
package com.xbxaq.xml_;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
public class LogBackTest {
public static void main(String[] args) {
// 1 创建一个logger日志对象
final Logger LOGGER = LoggerFactory.getLogger("LogBackTest");
//while (true) {
try {
LOGGER.info("chu法方法开始执行~~~");
chu(10, 1);
LOGGER.info("chu法方法执行成功~~~");
} catch (Exception e) {
e.printStackTrace();
LOGGER.error("chu法方法执行失败了,出现了bug~~~");
}
//}
}
public static void chu(int a, int b){
int c = a / b;
System.out.println(c);
}
}
日志级别
- 日志级别指的是日志信息的类型,常见日志级别如下:
日志级别 | 说明 |
---|---|
trace | 追踪,指明程序运行轨迹 |
debug | 调试,实际应用中一般将其作为最低级别,而 trace 则很少使用 |
info | 输出重要的运行信息,数据连接、网络连接、IO操作等等,使用较多 |
warn | 警告信息,可能会发生问题,使用较多 |
error | 错误信息, 使用较多 |
注意:只有日志的级别是大于或等于核心配置文件配置的日志级别,才会被记录,否则不记录。
级别程度依次是:TRACE<DEBUG< INFO<WARN<ERROR
默认级别是debug(忽略大小写),只输出当前级别及高于该级别的日志
分类:
JAVA
版权申明
本文系作者 @小白学安全 原创发布在 xbxaq.com 站点,未经许可,禁止转载!
评论