首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Spring log4j2应用程序创建一个空日志文件和一个工作日志文件

Spring log4j2应用程序创建一个空日志文件和一个工作日志文件
EN

Stack Overflow用户
提问于 2021-12-20 15:48:10
回答 1查看 373关注 0票数 1

假设我们有一个简单的Spring引导应用程序:

pom.xml

代码语言:javascript
复制
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.6.1</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>

    <properties>
        <java.version>11</java.version>
        <log4j2.version>2.15.0</log4j2.version>
    </properties>

    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-log4j2</artifactId>
        </dependency>
        
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
            <exclusions>
                <exclusion>
                    <groupId>org.springframework.boot</groupId>
                    <artifactId>spring-boot-starter-logging</artifactId>
                </exclusion>
            </exclusions>
        </dependency>

<!-- other dependencies -->

    </dependencies>

log4j2.xml (src/main/resources/)

代码语言:javascript
复制
<?xml version="1.0" encoding="UTF-8"?>
<Configuration>
    <Appenders>
        <Console name="Console" target="SYSTEM_OUT">
            <PatternLayout disableAnsi="false">
                <pattern>%style{%d{ISO8601}}{black} %highlight{%-5level }[%style{%t}{bright,blue}] %style{%C{3.}}{bright,yellow}: %highlight{[%p] %msg%n%throwable}</pattern>
            </PatternLayout>
        </Console>

        <RollingFile name="RollingFile"
                     fileName="c:/tmp/sw-b2b-data-service/logs/sw-b2b-data-service.log"
                     filePattern="c:/tmp/sw-b2b-data-service/logs/$${date:yyyy-MM}/sw-b2b-data-service-%d{yyyy-MM-dd}-%i.log.gz">
            <PatternLayout>
                <pattern>%d %p %C{3.} [%t] %m%n</pattern>
            </PatternLayout>
            <Policies>
                <SizeBasedTriggeringPolicy
                        size="4 MB" />
            </Policies>
        </RollingFile>
    </Appenders>

    <Loggers>
        <Root level="debug">
            <AppenderRef ref="Console" />
            <AppenderRef ref="RollingFile" />
        </Root>

    </Loggers>

</Configuration>

我使用Windows,因此log4j2.xml包含“file.=c:/tmp/.”等行。

我通常使用一个相对路径来定位日志文件,但这次我决定将日志文件从项目文件夹移到一个临时的dir中。现在,当我部署jar时,它包含了log4j2.xml和“file.=c:/tmp/.”"BOOT-INF/classes“中的行。

我认为这个配置没有问题,因为我们总是在服务的起始行中使用-Dlogging.config=./log4j.xml覆盖默认的log4j2.xml。

但是现在每当我启动服务时,它都会在服务的工作文件夹中创建一个文件夹结构“c:/tmp/./log/”,其中包含一个空的SW-B2B数据服务日志文件。

实际日志将转到覆盖log4j2.xml中定义的日志文件(类似于%service's_root%/logs/sw-b2b-data-service.log). )。

我怎样才能摆脱那个文件夹(和里面的空文件)创建?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-12-21 05:17:40

当Spring启动时,Log4j被配置了两次:

  • 一旦调用了一些LogManager.getLogger,Log4j就会执行自动配置(cf )。Log4j文档),
  • 当Spring初始化了它的环境时,它再次以编程方式配置Log4j (参见春季文献)。

在您的示例中,log4j2.xml用于第一次配置Log4j (并创建第一个文件),而Spring属性logging.config的值仅在第二次配置期间考虑。

要更改此行为,您应该:

  • log4j2.xml重命名为log4j2-spring.xml,以便在第一次配置期间不使用该文件(如果不指定logging.config,则由logging.config使用),
  • 或者,将系统属性log4j2.configurationFile设置为新配置的位置。此设置将在第一个配置之后工作,但一旦Spring重新配置上下文,该设置将被覆盖。
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/70424393

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档