log4j日志文件未在指定位置创建springboot

sulc1iza  于 2021-07-14  发布在  Java
关注(0)|答案(2)|浏览(459)

我正在尝试在springboot中配置log4j2。我已经从pom.xml中删除(排除)了logback依赖项。我正在名为log4j2.xml的资源文件夹下使用此xml

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <Configuration status="DEBUG">
  3. <Appenders>
  4. <Console name="LogToConsole" target="SYSTEM_OUT">
  5. <PatternLayout pattern="%d{HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n"/>
  6. </Console>
  7. <File name="LogToFile" fileName="logs/app.log">
  8. <PatternLayout>
  9. <Pattern>%d %p %c{1.} [%t] %m%n</Pattern>
  10. </PatternLayout>
  11. </File>
  12. </Appenders>
  13. <Loggers>
  14. <Logger name="com.ashish" level="debug" additivity="false">
  15. <AppenderRef ref="LogToFile"/>
  16. <AppenderRef ref="LogToConsole"/>
  17. </Logger>
  18. <Logger name="org.springframework.boot" level="error" additivity="false">
  19. <AppenderRef ref="LogToConsole"/>
  20. </Logger>
  21. <Root level="error">
  22. <AppenderRef ref="LogToFile"/>
  23. <AppenderRef ref="LogToConsole"/>
  24. </Root>
  25. </Loggers>
  26. </Configuration>

这是我的控制器类。

  1. package com.ashish;
  2. import org.apache.logging.log4j.LogManager;
  3. import org.apache.logging.log4j.Logger;
  4. import org.springframework.stereotype.Controller;
  5. import org.springframework.ui.Model;
  6. import org.springframework.web.bind.annotation.GetMapping;
  7. import java.util.Arrays;
  8. import java.util.List;
  9. @Controller
  10. public class HelloController {
  11. private static final Logger logger = LogManager.getLogger(HelloController.class);
  12. private List<Integer> num = Arrays.asList(1, 2, 3, 4, 5);
  13. @GetMapping("/")
  14. public String main(Model model) {
  15. if (logger.isDebugEnabled()) {
  16. logger.debug("Hello from Log4j 2 - num : {}", num);
  17. }
  18. logger.debug("Hello from Log4j 2 - num : {}", () -> num);
  19. model.addAttribute("tasks", num);
  20. return "welcome";
  21. }
  22. private int getNum() {
  23. return 100;
  24. }
  25. }

我在这里遗漏了什么吗?我也尝试使用最新版本的log4j2.properties设置它,但是仍然没有创建它。当我运行应用程序时,我看不到任何日志文件在xml中指定的路径上动态创建。

tct7dpnv

tct7dpnv1#

首先,在配置中指定status=“debug”。因此,您将看到log4j在控制台(或system.out路由到的任何地方)上配置自己。如果不这样做,那么就不是真正使用log4j。
如果确实看到了输出,请检查调试行。我怀疑您的日志文件不是由于权限问题而无法创建,就是没有按预期的方式编写。
您的配置指定了一个名为“logs”的相对目录。应用程序启动时的工作目录应该包含日志目录。通常在linux上,结果是“/”。您几乎肯定没有权限在那里创建日志目录,因此配置将失败。

ntjbwcob

ntjbwcob2#

我不能评论log4j2配置文件本身的内容,可能首先在控制台上打印并确保它确实由log4j2驱动是有意义的。不过,我要提到问题的开头:
我正在尝试在springboot中配置log4j2。我已经从pom.xml中删除(排除)了logback依赖项
你不呈现 pom.xml 但一般来说,为了将spring boot切换到log4j2,您应该:
“排除”spring boot的默认日志机制:

  1. <dependency>
  2. <groupId>org.springframework.boot</groupId>
  3. <artifactId>spring-boot-starter</artifactId>
  4. <exclusions>
  5. <exclusion>
  6. <groupId>org.springframework.boot</groupId>
  7. <artifactId>spring-boot-starter-logging</artifactId>
  8. </exclusion>
  9. </exclusions>
  10. </dependency>

添加一个log4j2启动程序,该启动程序将依次(传递地)添加与spring引导版本兼容的版本的log4j2依赖关系:

  1. <dependency>
  2. <groupId>org.springframework.boot</groupId>
  3. <artifactId>spring-boot-starter-log4j2</artifactId>
  4. </dependency>

快速谷歌(quickgoogle)展示了本教程,其中包含了所有步骤,包括这种集成的端到端示例。

展开查看全部

相关问题