SpringBoot中项目如何读取外置logback配置文件

yizhihongxing

Spring Boot默认使用Logback作为日志框架,可以通过在项目中添加logback.xml或者logback-spring.xml配置文件来配置日志输出。但是在某些情况下,我们希望将日志配置文件放在项目外部,这时就需要进行一些额外的配置。

以下是SpringBoot中项目如何读取外置logback配置文件的完整攻略:

  1. 首先,在项目的pom.xml中添加logback依赖:
<dependency>
    <groupId>ch.qos.logback</groupId>
    <artifactId>logback-classic</artifactId>
</dependency>
  1. 在src/main/resources目录下创建一个名为logback.xml或logback-spring.xml的文件,并且在里面添加相应的配置。例如,以下是一个简单的logback-spring.xml配置文件:
<?xml version="1.0" encoding="UTF-8"?>
<configuration debug="true">
    <springProfile name="dev">
        <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
            <encoder>
                <pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n</pattern>
            </encoder>
        </appender>

        <root level="info">
            <appender-ref ref="STDOUT" />
        </root>
    </springProfile>
</configuration>
  1. 在Spring Boot启动类中添加一些额外的配置,以让Spring Boot能够识别并读取外部的logback配置。以下是一个示例代码:
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.support.PropertySourcesPlaceholderConfigurer;
import org.springframework.core.io.ClassPathResource;
import org.springframework.core.io.FileSystemResource;
import org.springframework.core.io.Resource;
import org.springframework.core.io.support.PathMatchingResourcePatternResolver;

@SpringBootApplication
@ComponentScan
public class Application {

    public static void main(String[] args) {
        SpringApplication.run(Application.class, args);
    }

    private static final String DEFAULT_LOG_PATH = "/logback.xml";

    static {
        try {
            Resource[] resources = new PathMatchingResourcePatternResolver().getResources("classpath:logback*.xml");
            if(resources == null || resources.length == 0){
                return;
            }
            for(Resource resource: resources){
                if(resource instanceof ClassPathResource){
                    if(DEFAULT_LOG_PATH.equals(resource.getFilename())){
                        return;
                    }
                }
                LogbackConfigurer.initLogging(resource.getURL().getPath());
                break;
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    public static class LogbackConfigurer {
        private static final String XML_FILE_EXTENSION = ".xml";

        public static void initLogging(String configFileLocation) {
            // 如果配置文件没有指定扩展名,则添加默认的扩展名
            if (!configFileLocation.toLowerCase().endsWith(XML_FILE_EXTENSION)) {
                configFileLocation = configFileLocation + XML_FILE_EXTENSION;
            }

            // 添加外部文件系统资源
            Resource configLocation = new FileSystemResource(configFileLocation);

            // 判断配置文件是否存在,如果不存在,则使用默认配置文件
            if (!configLocation.exists()) {
                configLocation = new ClassPathResource(DEFAULT_LOG_PATH);
            }

            // 添加属性配置占位符
            PropertySourcesPlaceholderConfigurer configurer = new PropertySourcesPlaceholderConfigurer();
            configurer.setLocation(configLocation);

            // 重新初始化日志配置
            org.springframework.core.io.ResourceLoader loader = null;
            org.springframework.core.io.ResourcePatternResolver patternResolver = null;
            LogbackLoggingSystem loggingSystem = new LogbackLoggingSystem(loader);
            loggingSystem.beforeInitialize();
            loggingSystem.initialize(configLocation, null);
            loggingSystem.afterInitialize();
        }
    }
}

在上述代码中,我们首先查找classpath:logback*.xml(注意要加上“classpath:”前缀),返回一个org.springframework.core.io.Resource数组。然后我们检查每个资源,选择第一个匹配的文件,以此为基础调用LogbackConfigurer.initLogging()方法,并且跳出循环。LogbackConfigurer.initLogging()方法的作用是读取配置文件并初始化logback。

完整地说,这个方法做了以下几个步骤:

  • 检查configFileLocation中是否指定了扩展名,如果没有,则添加默认的" .xml "扩展名。
  • 将configFileLocation转换为一个org.springframework.core.io.FileSystemResource。
  • 检查文件是否存在,如果不存在,则使用默认的配置文件。
  • 添加PropertySourcesPlaceholderConfigurer,以便properties的值可以被注入到logback配置中。
  • 使用LogbackLoggingSystem初始化和重新设置日志配置。

  • 最后,将logback.xml或logback-spring.xml文件放在项目根目录下或者其他指定位置,并运行Spring Boot应用程序,你就能看到应用程序使用的是外部的配置文件而不是在项目中的默认设置。

以上就是SpringBoot中项目如何读取外置logback配置文件的完整攻略,这里还提供了一个示例代码和一个配置文件作为参考,供大家使用。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:SpringBoot中项目如何读取外置logback配置文件 - Python技术站

(0)
上一篇 2023年6月25日
下一篇 2023年6月25日

相关文章

  • 利用IP地址欺骗突破防火墙

    利用IP地址欺骗突破防火墙的完整攻略 注意:本文仅用于学术研究和安全测试目的,任何未经授权的非法活动均是违法的。请遵守法律法规。 攻击者可以利用IP地址欺骗技术来绕过防火墙,隐藏其真实身份并获取未授权的访问权限。下面是一个详细的攻略,包含两个示例说明: 步骤1:获取目标网络的信息攻击者首先需要收集目标网络的信息,包括目标IP地址范围、子网掩码、网关地址等。这…

    other 2023年7月30日
    00
  • adb push中文路径文件名丢失后缀的解决方法

    以下是详细的“adb push中文路径文件名丢失后缀的解决方法”的攻略: 问题描述 在使用adb push命令把文件推送到Android设备时,如果文件路径或文件名包含中文字符,就可能会出现文件名丢失后缀的情况。 原因分析 这是因为adb命令默认使用的是ASCII编码,而中文字符无法直接使用ASCII编码进行传输,因此就会出现丢失后缀的情况。 解决方法 方法…

    other 2023年6月26日
    00
  • 存储过程里的递归 实现方法

    当需要处理大量数据、需要进行多层嵌套查询或连续的递归操作时,使用存储过程进行递归处理通常会比较高效。下面是实现存储过程中的递归的完整攻略: 1.创建表和存储过程 首先,我们需要在数据库中创建一个用于存储数据的表,例如一个员工表: CREATE TABLE employee ( id INT PRIMARY KEY AUTO_INCREMENT, name V…

    other 2023年6月27日
    00
  • 如何搭建自己CDN服务器(LuManager)

    下面是详细讲解如何搭建自己的CDN服务器(LuManager)的完整攻略: 一、前置准备 在进行LuManager的搭建之前,需要准备以下环境: 一台具备公网IP的服务器(推荐Ubuntu 18.04) 一个域名,需要在DNS解析中添加CNAME记录,将CDN的子域名解析到你的服务器公网IP上。 安装Nginx服务器,在Ubuntu系统中可以通过以下命令进行…

    other 2023年6月26日
    00
  • Typescript井字棋的项目实现

    Typescript井字棋项目实现攻略 项目概述 本项目旨在使用Typescript编写一个井字棋游戏的网页应用。通过本项目的实现,你将学会如何使用Typescript创建对象、定义接口、编写类方法以及进行页面交互。 准备工作 在开始实现项目之前,你需要完成以下准备工作:1. 安装Node.js和npm(如果尚未安装)。2. 确保你已经掌握了基本的HTML、…

    other 2023年6月28日
    00
  • Android实现读取SD卡下所有TXT文件名并用listView显示出来的方法

    下面是实现读取SD卡下所有TXT文件名并用listView显示出来的方法的攻略: 确认权限 首先我们需要在AndroidManifest.xml中添加读取SD卡权限: <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" /> 获取SD…

    other 2023年6月27日
    00
  • 电脑设置自动关机和取消自动关机代码bat命令

    以下是电脑设置自动关机和取消自动关机代码bat命令的完整攻略,包括以下步骤: 编写自动关机代码 编写取消自动关机代码 运行自动关机代码 取消自动关机 示例说明 步骤一:编写自动关机代码 在设置电脑自动关机之前,需要编写自动关机代码。以下是编写自动关机代码的步骤: 打开记事本或其他文本编辑器 输入以下代码: shutdown -s -t [秒数] 其中,[秒数…

    other 2023年5月9日
    00
  • centos7下搜狗输入法的安装教程

    CentOS 7下搜狗输入法的安装教程 搜狗输入法是一款常用的中文输入法,本文将介绍在CentOS 7下安装搜狗输入法的完整攻略,包括两个示例说明。 步骤一:安装依赖 在安装搜狗输入法之前,需要安装一些依赖。可以使用以下命令安装: sudo yum install -y gtk2-devel gtk3-devel libXtst-devel libXt-de…

    other 2023年5月9日
    00
合作推广
合作推广
分享本页
返回顶部