当前位置: 首页 > 知识库问答 >
问题:

logback.xml在application.yml

南宫星波
2023-03-14

我正在使用Spring-Boot1.2.2版本构建一个web应用程序。

我想根据属性“spring.profiles.active”的值配置日志输出。

该属性在application.yml中定义,锁定配置在logback.xml中描述。

但是我发现logback.xml是在application.yml之前计算的。

如何在logback.xml之前启动一个读取application.yml的SpringApplication?

这是我的application.java。

/**
 * Application.java --
 */
package my.project;

import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.builder.SpringApplicationBuilder;

@SpringBootApplication
public class Application {

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

}

当我将logback.xml编写成像这样的糟糕格式时,

<?xml version="1.0" encoding="UTF-8"?>
aaa

Spring-boot报告一个错误,该错误显示在SpringApplicationBuilder的构造函数中读取了logback.xml。

ERROR in ch.qos.logback.core.joran.event.SaxEventRecorder@449b193b - XML_PARSING - Parsing fatal error on line 2 and column 1 org.xml.sax.SAXParseException; lineNumber: 2; columnNumber: 1;
        [snip]
        at      at org.apache.commons.logging.impl.SLF4JLogFactory.getInstance(SLF4JLogFactory.java:155)
        at      at org.apache.commons.logging.impl.SLF4JLogFactory.getInstance(SLF4JLogFactory.java:132)
        at      at org.apache.commons.logging.LogFactory.getLog(LogFactory.java:275)
        at      at org.springframework.boot.SpringApplication.<init>(SpringApplication.java:160)
        at      at org.springframework.boot.builder.SpringApplicationBuilder.createSpringApplication(SpringApplicationBuilder.java:96)
        at      at org.springframework.boot.builder.SpringApplicationBuilder.<init>(SpringApplicationBuilder.java:84)
        at      at my.project.Application.main(Application.java:13)
        [snip]

另一方面,当我通过添加制表符将application.yml设置为某种不正确的格式时,Spring-boot会报告一个错误,显示它是在“run”方法中读取的。

Caused by: while scanning for the next token
found character          '\t(TAB)' that cannot start any token. (Do not use \t(TAB) for indentation)
 in 'reader', line 1, column 1:
        [snip]
        at org.springframework.boot.context.config.ConfigFileApplicationListener.onApplicationEvent(ConfigFileApplicationListener.java:126)
        at org.springframework.context.event.SimpleApplicationEventMulticaster.invokeListener(SimpleApplicationEventMulticaster.java:151)
        at org.springframework.context.event.SimpleApplicationEventMulticaster.multicastEvent(SimpleApplicationEventMulticaster.java:128)
        at org.springframework.boot.context.event.EventPublishingRunListener.publishEvent(EventPublishingRunListener.java:100)
        at org.springframework.boot.context.event.EventPublishingRunListener.environmentPrepared(EventPublishingRunListener.java:59)
        at org.springframework.boot.SpringApplication.run(SpringApplication.java:285)
        at org.springframework.boot.builder.SpringApplicationBuilder.run(SpringApplicationBuilder.java:139)
        at my.project.Application.main(Application.java:13)

共有1个答案

颛孙和颂
2023-03-14

如何在logback.xml之前启动SpringApplication读取application.yml

你不能。

很早就读取了日志配置,以便在初始化过程的其余部分可以进行日志记录。然后是第二阶段,根据application.yml中的某些配置重新配置日志。

日志框架不理解application.yml或Spring的环境,因此某些属性被复制到系统属性之上,然后您可以在日志配置中引用这些属性。这些属性是logging.filelogging.path,它们分别复制到logging_filelogging_path。有关更多信息,请参阅Spring Boot文档。

还有一个开放的问题是允许在application.yml中执行更多的日志配置。

 类似资料:
  • null 其中%classpath%是一个环境变量,它具有日志所需的.jar文件的路径,如: logback-access-1.1.2.jar logback-classic-1.1.2.jar logback-core-1.1.2.jar SLF4J-API-1.7.6.jar 这是我的logback.xml文件 \logback>java-cp.;%classpath%-dlogback.co

  • 和以下依赖项: 现在伐木对我来说很好。但现在我正在尝试将文件移到war文件之外,这样就不必更改war文件来更改日志级别。我试图将文件移动到。我找不到指定文件路径的方法,该路径将是${catalina.base}/conf/logback.xml。我发现了一些类似的问题,但我可以找到一个可以使用的解决方案:使用application.properties和logback Externalizatio

  • 我有一个Java maven项目,需要使用logback作为日志记录框架。我已经将logback.xml配置文件放在src/main/conf文件夹中。但是,由于src/main/conf不在类路径中,它似乎没有被拾取。在构建项目时,我将该文件夹的所有内容复制到target/root/conf,并希望将该目录作为类路径的一部分。谁能让我知道我该怎么强迫?

  • 我有一个SBT/Scala项目,该项目包含其依赖项“ch.qos.logback”%“logback-classic”%“1.0.13”,并包含一个logback.xml文件,其内容如下: 当我运行该程序时,得到的输出如下: ... 我启用了logback配置调试,这样您就可以看到logback声称将该类的loglevel设置为ERROR。但仍然记录了这些消息。

  • 问题内容: 我有一个使用Logback的Spring Boot控制台应用程序。所有属性(针对应用程序和Logback)都被外部化为类路径中的标准application.properties文件。在应用程序本身中可以很好地拾取这些属性,但在logback.xml文件中不会拾取这些属性。在Spring Boot启动之前,似乎好像处理了logback.xml,因此未处理EL占位符。 以FileNameP

  • 我有一个使用Logback的Spring Boot控制台应用程序。所有属性(应用程序和日志)都外部化到类路径中的标准application.properties文件中。这些属性在应用程序本身中可以很好地提取,但在logback.xml文件中不能提取。看起来好像是在Spring Boot启动之前处理了logback.xml,因此没有处理EL占位符。 使用FileNamePattern作为示例,在ap