在我的application.yml中,我得到了:
logging:
config: classpath:log4j2.debug.yml
其他一些人在不同的档案中。当我启动应用程序时,我得到以下内容:
ERROR StatusLogger No log4j2 configuration file found. Using default configuration: logging only errors to the console.
如果我只是将log4j2.xml放在配置文件的旁边,那就可以了。所以我认为这是一个我错过了依赖性的东西,或者用log4j2是不可能的?
参考:Boot Logging Level说我应该尝试吗?
答案 0 :(得分:15)
就我而言,我使用的是属性文件而不是yaml文件。我想要两个日志文件:一个将所有内容记录到控制台,另一个记录文件。所以我制作了两个log4j2配置文件:log4j2-dev.xml和log4j2-file.xml。
我使用两个Spring配置文件:默认配置文件和名为“dev”的配置文件。要切换log4j2配置文件,我创建了一个包含以下内容的文件application.properties:
spring.profiles.active=
logging.config=classpath:log4j2-file.xml
我还有另一个属性文件application-dev.properties,它在Spring检测到“dev”配置文件时自动激活。它包含:
logging.config=classpath:log4j2-dev.xml
当我想使用log4j2-dev.xml配置时,我只需在application.properties中添加“dev”作为“spring.profiles.active =”的值。
您可以在此页面查看Feiyu Zhou的回答。他使用Yaml配置文件提出了一个解决方案:How to define log4j2 path by application.properties?
当然,您可以随时删除application.properties的属性logging.config,并在log4j2.xml中重命名log4j2-file.xml。它将默认由Log4j2加载,而不需要由Spring配置文件触发
答案 1 :(得分:2)
另请参阅Log4j 2 Configuration manual page:
Log4j2将首先尝试在类路径中查找名为log4j2-test.yaml
的文件,然后在JSON和XML中查找相同的文件,最后将在类路径中查找名为log4j2.yml
的文件。
您还可以显式指定配置文件位置。
答案 2 :(得分:2)
作为使用Spring配置文件的替代方法(需要您明确设置哪些配置文件处于活动状态),您可以使用Maven构建配置文件在log4j2配置文件之间切换。
<强> application.yml 强>
logging:
config: classpath:${log4j2.config}
<强>的pom.xml 强>
<project>
<properties>
<log4j2.config>log4j2.xml</log4j2.config>
</properties>
<profiles>
<profile>
<id>local</id>
<properties>
<log4j2.config>log4j2-local.xml</log4j2.config>
</properties>
</profile>
</profiles>
</project>
通过这种方式,默认的log4j配置文件(log4j2.xml)可用于正常构建。
只要使用local
构建配置文件(例如mvn package -Plocal
)构建项目,第二个配置文件(log4j2-local.xml)就可用于本地开发/测试。
答案 3 :(得分:1)
以下是适用于Spring Boot 2和log4j2.xml的解决方案 确保您具有用于不同环境和配置文件的文件application-local.properties,application-dev.properties。
永远不要将log4j2.xml保留在src / main / resources文件夹中,而应将其保留在src / main / resources下创建的特定于配置文件的文件夹下,如下所示: src / main / resources / local src / main / resources / dev等... 然后像这样输入 logging.config:application-local.properties中的classpath:local / log4j2.xml 和 logging.config:application-dev.properties中的classpath:dev / log4j2.xml
还将log4j2.xml保留在每个具有相同文件名log4j2.xml的文件夹中,并且再也不要将其保留在src / main / resources下,因为应用程序默认会选择我们不想要的文件。如果这些特定于您的环境的xml不同,则每种配置都有不同的配置,并且应该可以使用。.还请使用提供的profile参数运行spring boot。
然后,您可以根据以下环境修改日志文件路径...
<RollingFile name="RollingFileAppender" fileName="c:\\logs\\logs_test\\og4j2-demo.log" filePattern="c:\\logs\\logs_test\\log4j2-demo-%d{yyyy-MM-dd}-%i.log">
答案 4 :(得分:0)
您的application.yml似乎已正确配置。也许是因为您需要将依赖项jackson-databind和jackson-dataformat-yaml添加到pom才能使用log4j2.yml。
如果您有spring-boot-starter-web,并且已经导入jackson-databind,则只需要jackson-dataformat-yaml:
<dependencies>
<!-- not needed if you have spring-boot-starter-web in the classpath -->
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.dataformat</groupId>
<artifactId>jackson-dataformat-yaml</artifactId>
</dependency>
</dependencies>
答案 5 :(得分:0)
我使用xml文件配置log4j2。对我有用的是使用@Component
方法添加一个@PostConstruct
,在其中我重新配置了日志记录:
LoggerContext context = (LoggerContext)LogManager.getContext(false);
context.setConfigLocation(URI.create("path to file"));
context.reconfigure();
其中文件的路径类似于classpath:log4j2-(insert spring profile here).xml
。为此,我必须排除spring-boot-starter-logging
并包括spring-boot-starter-log4j2
。我花了很长时间尝试使此log4j2配置正常工作,所以也许这会对其他人有所帮助。