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

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

我正在尝试在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中指定的路径上动态创建。

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的默认日志机制:

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter</artifactId>
    <exclusions>
        <exclusion>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-logging</artifactId>
        </exclusion>
    </exclusions>
</dependency>

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

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-log4j2</artifactId>
</dependency>

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

相关问题