我正在尝试在springboot中配置log4j2。我已经从pom.xml中删除(排除)了logback依赖项。我正在名为log4j2.xml的资源文件夹下使用此xml
<?xml version="1.0" encoding="UTF-8"?>
<Configuration status="DEBUG">
<Appenders>
<Console name="LogToConsole" target="SYSTEM_OUT">
<PatternLayout pattern="%d{HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n"/>
</Console>
<File name="LogToFile" fileName="logs/app.log">
<PatternLayout>
<Pattern>%d %p %c{1.} [%t] %m%n</Pattern>
</PatternLayout>
</File>
</Appenders>
<Loggers>
<Logger name="com.ashish" level="debug" additivity="false">
<AppenderRef ref="LogToFile"/>
<AppenderRef ref="LogToConsole"/>
</Logger>
<Logger name="org.springframework.boot" level="error" additivity="false">
<AppenderRef ref="LogToConsole"/>
</Logger>
<Root level="error">
<AppenderRef ref="LogToFile"/>
<AppenderRef ref="LogToConsole"/>
</Root>
</Loggers>
</Configuration>
这是我的控制器类。
package com.ashish;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.GetMapping;
import java.util.Arrays;
import java.util.List;
@Controller
public class HelloController {
private static final Logger logger = LogManager.getLogger(HelloController.class);
private List<Integer> num = Arrays.asList(1, 2, 3, 4, 5);
@GetMapping("/")
public String main(Model model) {
if (logger.isDebugEnabled()) {
logger.debug("Hello from Log4j 2 - num : {}", num);
}
logger.debug("Hello from Log4j 2 - num : {}", () -> num);
model.addAttribute("tasks", num);
return "welcome";
}
private int getNum() {
return 100;
}
}
我在这里遗漏了什么吗?我也尝试使用最新版本的log4j2.properties设置它,但是仍然没有创建它。当我运行应用程序时,我看不到任何日志文件在xml中指定的路径上动态创建。
2条答案
按热度按时间tct7dpnv1#
首先,在配置中指定status=“debug”。因此,您将看到log4j在控制台(或system.out路由到的任何地方)上配置自己。如果不这样做,那么就不是真正使用log4j。
如果确实看到了输出,请检查调试行。我怀疑您的日志文件不是由于权限问题而无法创建,就是没有按预期的方式编写。
您的配置指定了一个名为“logs”的相对目录。应用程序启动时的工作目录应该包含日志目录。通常在linux上,结果是“/”。您几乎肯定没有权限在那里创建日志目录,因此配置将失败。
ntjbwcob2#
我不能评论log4j2配置文件本身的内容,可能首先在控制台上打印并确保它确实由log4j2驱动是有意义的。不过,我要提到问题的开头:
我正在尝试在springboot中配置log4j2。我已经从pom.xml中删除(排除)了logback依赖项
你不呈现
pom.xml
但一般来说,为了将spring boot切换到log4j2,您应该:“排除”spring boot的默认日志机制:
添加一个log4j2启动程序,该启动程序将依次(传递地)添加与spring引导版本兼容的版本的log4j2依赖关系:
快速谷歌(quickgoogle)展示了本教程,其中包含了所有步骤,包括这种集成的端到端示例。