JAVA—日志技术

对于两类特殊文件和日志技术的初步学习理解

目录

1.特殊文件

(1)Properties属性文件

(2)XML文件

2.日志技术


1.特殊文件

作用:存储有关系的数据,作为系统的配置文件,作为信息进行传输

(1)Properties属性文件

属性文件,是一个Map集合,内容都是一些键值对信息,每行都是一个键值对

一般以.properties结尾,通过Properties可以读写属性文件里的内容。(其实无所谓文件后缀是什么,属性文件关注文件内容是键值对)

|---------------------|-------------------------|
| 构造器 | 说明 |
| public Properties() | 用于构建Properties集合对象(空容器) |

|--------------------------------------------|------------------------|
| 常用方法 | 说明 |
| public void load(InputStream is) | 通过字节输入流,读取属性文件里的键值对数据 |
| public void load(Reader reader) | 通过字符输入流,读取属性文件里的键值对数据 |
| public String getProperty(String key) | 根据键获取值(实际就是get方法) |
| public Set<String> stringPropertyNames() | 获取全部键的集合(实际就是KeySet方法) |

java 复制代码
package IO_Study;

import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
import java.io.Reader;
import java.util.HashSet;
import java.util.Properties;
import java.util.Set;

public class Text15 {
    public static void main(String[] args) throws IOException {
        //1.创建一个Properties集合
        Properties pro = new Properties();
        System.out.println(pro); //集合初始化为空

        //2.开始加载属性文件的键值对数据到Properties对象中
        Reader reader = new FileReader("C:\\Users\\22935\\IdeaProjects\\JAVA_study\\Collection\\src\\IO_Study\\data_text.properties");
        pro.load(reader);
        System.out.println(pro);

        System.out.println(pro.getProperty("admin")); //根据键取值

        Set<String> keys = pro.stringPropertyNames();
        for (String key : keys) {
            String value = pro.getProperty(key);
            System.out.println(key + "----->" + value);
        }
    }
}

|----------------------------------------------------|-------------------------|
| 常用方法 | 说明 |
| public Object setProperty(String key,String value) | 保存键值对数据到properrties对象中去 |
| public void store(OutputStream os,String comments) | 把键值对数据,通过字节输出流写到属性文件里去 |
| public void store(Wrriter w,String comments) | 把键值对数据,通过字符输出流写到属性文件里去 |

java 复制代码
package IO_Study;

import java.io.FileWriter;
import java.io.IOException;
import java.util.Properties;

public class Text16 {
    public static void main(String[] args) throws IOException {
        Properties pro  = new Properties();
        pro.setProperty("楠楠","050501");

        //存入键值对
        pro.store(new FileWriter("C:\\Users\\22935\\IdeaProjects\\JAVA_study\\Collection\\src\\IO_Study\\data_text.properties"),"users");

    }
}

(2)XML文件

可扩展标记语言,本质是一种的格式,可以用来存储复杂的数据结构,和数据关系
XML的特点:

  • XML的<标签名> 称为一个标或一个元素,一般成对出现
  • 标签名可以自己定义(可拓展),但必须正确嵌套
  • XML中只能有一个根标签
  • XML中的标签可以有属性
  • 文件放置的是XML格式的数据,这个文件就是XML文件,后缀一般要写成.xml
XML 复制代码
<?xml version = "1.0" encoding = "UTF-8"?>
<!-- 注释:抬头声明必须放在第一行,必须有-->
<!-- version 默认版本号码 encoding 文件的编码-->
<!-- 根标签只能有一个-->
<users>
    <ueser is = "1">
        <name>陈平安</name>
        <sex>男</sex>
        <地址>落魄山</地址>
        <!--书写中"<"和"&"可能会出现冲突报错 ,需要特殊字符替代-->
        <password>pinpinanan</password>
    </ueser>

    <ueser is = "2">
        <name>宁姚</name>
        <sex>女</sex>
        <地址>五彩天下</地址>
        <password>tianzhen</password>
    </ueser>
</users>

XML书写中"<"和"&"可能会出现冲突报错 ,需要特殊字符替代

|--------|-------|
| &lt | < 小于 |
| &gt | > 大于 |
| &amp | & 和号 |
| &apos | ' 单引号 |
| &quot | " 引号 |

有一个CDATA的数据区:<![CDATA[...内容...]]>,里面的内容随意

应用场景:经常作为系统的配置文件,或者作为一种特殊的数据结构,在网络中进行传输

读取数据:

开源解析XML的框架,最知名的是:Dom4j

SAXReader:Dom4j的解析器

|--------------------------------------|--------------------|
| 构造器 | 说明 |
| public SAXReader() | 构建Dom4j的解析器 |
| public Document read(String url) | 把XML文件读成DOcument对象 |
| public Document read(InputStream is) | 通过字节输入流读取XML文件 |

Doument

|--------------------------|---------|
| 方法 | 说明 |
| Element getRootElement() | 获取根元素对象 |

Element

|----------------------------------------------|----------------------------|
| 方法名 | 说明 |
| public String getName() | 得到元素名称 |
| public List<Element> elements() | 得到当前元素下的所有子元素 |
| public List<Element> elements(String name) | 得到当前元素下指定名字的子元素返回集合 |
| public Element elements(String name) | 得到当前元素下指定名字的元素,如果有重名则返回第一个 |
| public String attributteValue(String name) | 通过属性名直接得到属性值 |
| public String elementText(子元素名) | 得到指定名称的子元素的文本 |
| public String getText() | 得到文本 |

数据写入XML文件中

不建议用Dom4j做,建议把数据拼接成XMl格式,用IO流写出去,使用DTD文档进行约束


2.日志技术

把程序运行的信息,记录到指定位置(控制台,文件,数据库)中,方便定位BUG,并了解程序的执行情况

可以随时以开关的形式控制日志的启停,无需侵入源代码中去进行修改

这里学习SLF4J日志接口下的logback日志框架

模块

|--------------------|------------------|
| lodback-core 01 | 基础模块 |
| lodback-classic 02 | 完整实现slf4j API的模块 |
| lodback-access 03 | 提供访问HTTP访问日志的功能 |

使用

  1. 导入Logback框架到项目中,三个模块
  2. 将Logback框架的核心配置文件logback.xml直接拷贝到src目录下
  3. 创建Logback框架提供的Logger对象,然后使用Logger对象调用其提供的方法就可以记录系统的日志信息
java 复制代码
package IO_Study;

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

public class TextLogger {
    public static final Logger LOGGER = LoggerFactory.getLogger("users");
    public static void main(String[] args) {
        try {
            LOGGER.info("chu方法开始运行");
            System.out.println(chu(10.0, 2.0));
        } catch (Exception e) {
            LOGGER.error("执行失败");
            throw new RuntimeException(e);
        }
    }

    public static double chu(double a, double b){
        LOGGER.debug("参数a"+a);
        LOGGER.debug("参数b"+b);
        double c = a/b;
        LOGGER.info("结果为"+c);
        return c;

        //目标位置的log文件中可以叠加
    }
}

核心配置文件

对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>C:/code/siyee-data.log</file>
        <!--指定日志文件拆分和压缩规则-->
        <rollingPolicy
                class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
            <!--通过指定压缩文件名称,来确定分割文件方式-->
            <fileNamePattern>C:/code/siyee-data2-%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="ALL">
        <appender-ref ref="CONSOLE"/>
        <appender-ref ref="FILE" />
    </root>
</configuration>

日志级别

|----------|--------------------------------|
| 日志级别 | 说明 |
| trace | 追踪,指明程序运行轨迹 |
| debug | 调试,实际应用中为最低级别,而trace中很少使用 |
| info | 输出重要的运行信息,数据连接,网络连接,IO操作等,使用较多 |
| warn | 警告信息,可能会发生问题 |
| error | 错误信息,使用较多 |

日志级别大于或者等于核心配置文件的日志级别才会被记录

学习时间:2024-8-28

相关推荐
xlsw_2 小时前
java全栈day20--Web后端实战(Mybatis基础2)
java·开发语言·mybatis
神仙别闹2 小时前
基于java的改良版超级玛丽小游戏
java
黄油饼卷咖喱鸡就味增汤拌孜然羊肉炒饭3 小时前
SpringBoot如何实现缓存预热?
java·spring boot·spring·缓存·程序员
暮湫3 小时前
泛型(2)
java
超爱吃士力架3 小时前
邀请逻辑
java·linux·后端
南宫生3 小时前
力扣-图论-17【算法学习day.67】
java·学习·算法·leetcode·图论
转码的小石3 小时前
12/21java基础
java
李小白663 小时前
Spring MVC(上)
java·spring·mvc
冷眼看人间恩怨4 小时前
【Qt笔记】QDockWidget控件详解
c++·笔记·qt·qdockwidget
GoodStudyAndDayDayUp4 小时前
IDEA能够从mapper跳转到xml的插件
xml·java·intellij-idea