假设我们有一个简单的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)。
我如何摆脱文件夹(和空文件内)创建?
当Spring启动时,Log4j配置两次:
LogManager。调用getLogger
,Log4j执行自动配置(参见Log4j文档),在您的情况下,log4j2。xml
用于第一次配置Log4j(并创建第一个文件),而Spring属性的值用于日志记录。配置
仅在第二次配置时考虑。
要更改此行为,您应该:
log4j2。xml
tolog4j2spring。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文件: