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方法)
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)把键值对数据,通过字符输出流写到属性文件里去
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 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对象调用其提供的方法就可以记录系统的日志信息
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 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 

  • 10
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值