Java有哪些配置文件?日志又如何使用?

思维导图


✅ 一、配置文件相关

1. Properties 文件(.properties
  • 本质:Map 键值对集合,用于存储系统配置。

  • 使用步骤

    1. 创建 Properties 对象;

    2. 调用 load() 方法加载文件(支持字节流/字符流);

    3. 使用 getProperty(key) 获取值。

  • 注意事项

    • 文件编码需为 UTF-8(避免中文乱码);

    • 框架(如 Spring)会自动读取该类配置文件。

2. XML 文件(.xml
  • 本质:可扩展标记语言,适合表示复杂结构和关系。

  • 语法规则

    • 必须有一个根标签;

    • 标签成对出现,正确嵌套;

    • 特殊字符需转义(如 &lt; 表示 <);

    • 支持注释:<!-- 注释内容 -->

  • 应用场景

    • 程序/框架配置文件;

    • 网络数据传输载体。

  • 解析方式

    • 无需手动解析,使用开源库如 Dom4j

  • 约束机制

    • DTD:约束标签结构,但不能约束数据类型;

    • Schema(.xsd):功能更强,支持数据类型约束;

    • 使用时需在 XML 中引入约束文档。


✅ 二、日志技术相关

1. 日志基础
  • 定义:程序运行过程中产生的信息(数据);

  • 输出方式:控制台、文件、数据库等;

  • 常用框架:Logback(基于 SLF4J 接口实现)。

2. Logback 使用
  • 所需 jar 包(3个):

    • slf4j-api:日志接口;

    • logback-core:基础模块;

    • logback-classic:功能模块,实现 SLF4J。

  • 使用步骤

    1. 导入 jar 包;

    2. 创建 Logger 对象(可用 @Slf4j 注解简化);

    3. 调用日志方法(如 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级别日志");
    }
}

好累...好想吃红烧鸡翅

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值