log4j logging.config用于 Spring Boot 的配置

iugsix8n  于 2022-11-06  发布在  Spring
关注(0)|答案(4)|浏览(215)

我想在我的spring Boot 应用程序中配置log4j.xml文件的位置。为此,我在我的www.example.com配置中添加了logging.config属性application.properties,指示log4j.xml文件路径。但似乎该属性被忽略了。但它应该根据spring boot文档工作:

logging.config= # location of config file (default classpath:logback.xml for logback)

我做错什么了吗?

cclgggtu

cclgggtu1#

Sping Boot 包括一些启动器,如果你想排除或交换特定的技术方面,可以使用它们。它默认使用logback,如果你要使用log4j,请在类路径中添加spring-boot-starter-log4j。例如,对于maven,它将是这样的:

<dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-log4j2</artifactId>
            <version>1.2.4.RELEASE</version>
</dependency>

以及对于log4j〈1.x:

<dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-log4j</artifactId>
            <version>1.2.4.RELEASE</version>
</dependency>

然后将logging.config添加到您的application.properties

logging.config = classpath:path/to/log4j.xml
sauutmhj

sauutmhj2#

我发现在某些情况下,外部日志记录配置(logback.xml)没有被忽略:当应用程序从应用程序文件夹启动时,它可以正常工作。2关于这一点的一些说明:应用程序是通过脚本运行的,脚本可以从任何地方调用。我还没有深入了解它为什么会这样工作,但是如果我在启动时提供配置文件路径作为参数,它就可以工作。所以我们只需要在运行脚本中添加这个参数:--spring.config.location=/configPath/application.properties这个问题可能是由Spring加载阶段引起的。如果你知道这个问题的根本原因是什么,请分享:)

8fq7wneg

8fq7wneg3#

根据Spring Boot 文件:
如果您使用启动器poms来组装依赖项,这意味着您必须排除Logback,然后包括您选择的Log4j版本。
就像这样:

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter</artifactId>
    <exclusions>
        <exclusion>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-logging</artifactId>
        </exclusion>
    </exclusions>
</dependency>
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-log4j</artifactId>
</dependency>
qkf9rpyu

qkf9rpyu4#

我花了几天的时间来了解这是否应该工作,我对此有怀疑。尽管文档中清楚地提到了如何使用自定义日志配置,但有些人认为它是differently。有很多关于这个属性的问题在spring github问题跟踪器上到处都不起作用,例如thisthis另一个有效点是日志配置必须尽可能早地完成,以便正确地记录应用程序初始化因此,系统属性看起来是这里最明智选项您可以将其保留在应用程序代码中。唯一的要求是在Spring上下文初始化之前设置它。

@SpringBootApplication
public class Application extends SpringBootServletInitializer {

    public static void main(String[] args) {
        // to start from command line
        System.setProperty("logging.config", "classpath:portal-log4j2.yaml");
        SpringApplication.run(Application.class, args);
    }

    @Override
    public void onStartup(ServletContext servletContext) throws ServletException {
        // to start within container
        System.setProperty("logging.config", "classpath:portal-log4j2.yaml");
        // this has SpringApplication::run() inside
        super.onStartup(servletContext);
    }
}

由于Tomcat Web容器中的所有应用程序都加载在同一个JVM中,因此没有必要处理自定义logging.config,而是对整个容器使用带有默认文件名的单个config。

相关问题