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

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

单于骁
2023-03-14

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

pom.xml

    <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/资源/)

<?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/…”这样的行。

我通常使用相对路径作为日志文件的位置,但这次我决定将日志文件从项目文件夹移到临时目录。现在,当我部署jar时,它包含log4j2。带有“file…=c:/tmp/…”的xml“BOOT-INF/classes”中的行。

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

但现在每次我启动服务时,它都会在服务的工作文件夹中创建一个文件夹结构“c:/tmp/../logs/”,其中包含一个空的sw-b2b-data-service。日志文件在里面。

实际日志将进入覆盖日志4J2中定义的日志文件。xml(类似于%service的_root%/logs/sw-b2b-data-service.log)。

我如何摆脱文件夹(和空文件内)创建?

共有1个答案

徐君植
2023-03-14

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

  • 只要一些LogManager。调用getLogger,Log4j执行自动配置(参见Log4j文档),

在您的情况下,log4j2。xml用于第一次配置Log4j(并创建第一个文件),而Spring属性的值用于日志记录。配置仅在第二次配置时考虑。

要更改此行为,您应该:

  • 重命名log4j2。xmltolog4j2spring。xml,以便在第一次配置期间不使用该文件(如果不指定logging.config,则Spring将使用该文件),
 类似资料:
  • 问题内容: 我当前正在创建一个可以包含模块的系统(将它们视为插件),其中每个模块可以拥有自己的专用日志。 我想使用log4j2项目进行日志记录,但是文件附加器似乎有些麻烦。 主项目(整个模块的模块加载器和“核心”)应具有自己的日志文件,而模块应具有自己的日志文件(如)。 通过阅读有关追加程序的文档,我发现了该类,并且我将使用它。直到我发现不能简单地将追加器添加到由创建的默认记录器中。 LogMan

  • 我目前正在创建一个系统,可以有模块(把它们看作插件),其中每一个都可以有自己的日志,专用的。 我想使用log4j2项目进行日志记录,但我似乎在文件附加符方面遇到了一些麻烦。 主项目(模块加载器和整个事情的“核心”)应该有自己的日志文件,而模块应该有自己的日志文件(像)。 即使搜索也没有给我提供任何接近的解决方案,我找到的只是xml配置中预定义的文件日志--这不是我想要的。 感谢你的阅读;即使是最轻

  • 问题内容: 我正在尝试配置log4j以将消息记录到文件中。现在,确实使用我提供的名称创建了该文件,但是日志未写入该文件。我的代码: 我文件的内容: 运行此命令时,将在控制台中获得以下输出: 该文件确实在我的主目录中创建。但是它是空的。 有什么想法我做错了吗?我正在使用log4j 1.2.17版。 问题答案: 输出似乎是Java标准日志记录框架(JUL)发出的默认格式。 因此,有两种可能性(想到):

  • 问题内容: 我们有一个weblogic批处理应用程序,它可以同时处理来自使用者的多个请求。我们使用log4j记录目的。现在,我们登录到单个日志文件以处理多个请求。调试给定请求的问题变得很麻烦,因为所有请求都将日志记录在一个文件中。 因此,计划是每个请求只有一个日志文件。使用者发送一个请求ID,必须对其进行处理。现在,实际上可能有多个使用者将请求ID发送到我们的应用程序。因此,问题是如何根据请求隔离

  • 我开发了一个网络项目。正在使用log4j生成日志文件。但是同一个应用程序部署在UNIX中,它也无法创建日志文件 我是unix新手。为什么不创建日志文件?这是代码。。。。 它正在服务器安装文件夹中创建日志文件。但不是在UNIX中创建。。我要做什么改变?

  • 我正在使用带有log4j2的Spring Boot1.5.9,当我测试日志记录功能时,创建了日志文件,但没有将日志写入其中,而控制台日志记录程序运行良好。请在pom.xml&log4j2.properties配置下面找到。 log4j2.properties文件: