Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/362.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java spring引导、logback和logging.config属性_Java_Spring_Spring Boot_Logging_Logback - Fatal编程技术网

Java spring引导、logback和logging.config属性

Java spring引导、logback和logging.config属性,java,spring,spring-boot,logging,logback,Java,Spring,Spring Boot,Logging,Logback,我正在使用logback库实现spring启动项目的日志记录。我想根据我的spring配置文件(属性'spring.pofiles.active')加载不同的日志配置文件。我有3个文件:logback-dev.xml、logback-inte.xml和logback-prod.xml。我使用的是spring boot版本1.2.2.0 正如您在spring引导文档()中所读到的那样。它说: 可以通过在类路径上包含适当的库来激活各种日志记录系统,并通过在类路径的根目录中或在Spring环境属性lo

我正在使用logback库实现spring启动项目的日志记录。我想根据我的spring配置文件(属性'spring.pofiles.active')加载不同的日志配置文件。我有3个文件:logback-dev.xml、logback-inte.xml和logback-prod.xml。我使用的是spring boot版本1.2.2.0

正如您在spring引导文档()中所读到的那样。它说:

可以通过在类路径上包含适当的库来激活各种日志记录系统,并通过在类路径的根目录中或在Spring环境属性logging.config指定的位置提供适当的配置文件来进一步定制这些日志记录系统。(但是请注意,由于日志记录是在创建ApplicationContext之前初始化的,因此无法控制Spring@配置文件中@PropertySources的日志记录。系统属性和传统的Spring Boot外部配置文件工作正常。)

因此,我尝试在application.properties文件中设置“logging.config”属性:

logging.config=classpath:/logback-${spring.profiles.active}.xml
但是当我启动应用程序时,我的logback-{profile}.xml没有加载


我认为日志记录是所有使用SpringBoot的项目都会遇到的常见问题。我采用上述方法是否正确?我有其他可行的解决方案,但我发现它们没有那么优雅(在logback.xml文件或命令行属性中使用Janino进行条件解析)。

我找到了一个解决方案,我理解spring为什么不使用在
应用程序.properties
文件中定义的“logging.config”属性

解决方案和解释:

初始化日志记录时,spring Boot只会查看

我使用的解决方案是包含一个父logback.xml文件,该文件根据spring概要文件包含正确的日志配置文件

logback.xml:


logback-[profile].xml(在本例中为logback-dev.xml):



  • 编辑(多个活动配置文件): 为了避免多个文件,我们可以使用需要Janino依赖关系()的条件处理,请参阅。 使用此方法,我们还可以同时检查多个活动配置文件。例如(我没有测试这个解决方案,所以如果它不起作用,请评论):

    
    

    关于条件处理的另一个示例,请参见javasenior answer。

    另一种可以处理多个概要文件的方法是为每个环境创建单独的属性文件

    application-prod.properties

    logging.config=classpath:logback-prod.xml
    
    logging.config=classpath:logback-dev.xml
    
    logging.config=classpath:logback-local.xml
    
    application-dev.properties

    logging.config=classpath:logback-prod.xml
    
    logging.config=classpath:logback-dev.xml
    
    logging.config=classpath:logback-local.xml
    
    应用程序本地属性

    logging.config=classpath:logback-prod.xml
    
    logging.config=classpath:logback-dev.xml
    
    logging.config=classpath:logback-local.xml
    
    注意

    如果你不小心,你可能会在意想不到的地方登录

    -Dspring.profiles.active=local,dev//将使用logback-dev.xml
    -Dspring.profiles.active=dev,local//将使用logback-local.xml
    
    带有回显的条件处理将是一个没有许多回显文件的解决方案。下面是一个带有spring配置文件的示例和回写配置

    
    .
    .
    附加器、记录器标签等。
    .
    .
    
    另外,您可能需要将其添加到pom.xml中

    
    org.codehaus.janino
    贾尼诺
    3.0.6
    
    我不建议为每个配置文件添加单独的logback XML,也不建议使用IF条件,而是建议使用以下方法(如果XML中的差异较小),以便于条件处理:

    
    
    Spring支持Logback XML文件中的下一个标记
    ,该标记如下所述。这意味着您可以轻松地从Spring属性文件添加变量,甚至这个变量值也可以通过Spring从环境/系统变量解析。

    您可以为不同的配置文件指定不同的logback.xml,只需3个步骤:

    1、在
    application.properties
    application.yml
    中指定激活的配置文件:

    spring.profiles.active: test
    
    <?xml version="1.0" encoding="UTF-8"?>
    <included>
        <include resource="org/springframework/boot/logging/logback/base.xml"/>
        <root level="INFO"/>
    </included>
    
    2、配置logback以按配置文件包括不同的配置:

    <!DOCTYPE configuration>
    <configuration scan="true" scanPeriod="30 seconds">
        <springProperty scope="context" name="profile" source="spring.profiles.active"/>
        <include resource="logback.${profile}.xml"/>
    </configuration>
    

    它非常简单,不需要做任何其他事情。

    这种方法似乎适合您的用例,但是,我们可能在环境中定义了多个概要文件,这会导致include中断。i、 e.spring.profiles.active=profile1,profile2。是的,没错。在本例中,我将使用janino库。当您同时拥有多个活动配置文件时,是否有优雅解决方案的更新?签出即将到来的Spring Boot 1.3.0您还可以在application.properties中定义配置文件,默认dev为Spring.profiles.active=${dev:dev}。如果您没有通过-Dspring.profiles.active默认值将为devdid,那么当您同时拥有多个活动配置文件时,您会找到一个优雅的解决方案吗?请检查我在2016年3月3日的编辑检查此链接:找到您的答案-文档链接:我们仍然必须指定spring.profiles.active=mode,对吗?