当前位置: 首页 > 知识库问答 >
问题:

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

马才
2023-03-14

我试图在springboot中配置log4j2。我已经从pom.xml.中删除(排除)了登录依赖项,我正在名为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;
    }

}

我在这里错过了什么吗?我尝试使用application.properties也使用最新版本的Log4j2.But仍然没有created.When我运行应用程序,我看不到任何日志文件在xml中指定的路径上动态创建。

共有2个答案

养星汉
2023-03-14

我无法评论log4j2配置文件本身的内容,可能首先在控制台上打印并确保它确实由log4j2驱动是有意义的。但是,我将参考问题的开头:

我正在尝试在springboot中配置log4j2。我已经从pom.xml中移除了(排除了)回退依赖项

您没有给出< code>pom.xml,但是一般来说,为了将spring boot切换到与log4j2一起工作,您应该:

  1. “排除”Spring引导的默认日志记录机制:
<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>
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-log4j2</artifactId>
</dependency>

快速谷歌已经揭示了这个教程,包含所有的步骤,包括这样一个集成端到端的例子。

井誉
2023-03-14

首先,在配置中指定了status="DEBUG"。因此,您将看到Log4j在控制台上(或者system.out被路由到的任何地方)配置自己。如果没有,那么您就没有真正使用Log4j。

如果确实看到输出,请检查调试行。我怀疑您的日志文件由于权限问题而未创建,或者未按预期写入。

您的配置指定了一个名为“logs”的相对目录。当应用程序启动时,无论哪个目录是工作目录,都应该包含您的日志目录。在Linux上经常以“/”结束。您几乎肯定没有权限在那里创建日志目录,因此配置将会失败。

 类似资料:
  • 我使用log4j进行日志记录,并且使用.log格式的所有日志文件,其结构简单,如; log4j.rootcategory=info,C,R log4j.appender.c=org.apache.log4j.consoleappender log4j.appender.c.layout=org.apache.log4j.patternlayout log4j.appender.r.layout=o

  • 大家好,我的社区, 我正在编写一个多线程应用程序,其中需要使用log4j为每个线程输出一个日志文件。理想情况下,我希望为每个线程运行一个单独的日志实例。我正在辩论我应该如何处理这个问题。因为每个日志实例的文件输出位置不同,所以我需要更新每个实例的属性。现在,我正在尝试创建一个新的记录器,将新属性设置到属性对象中,并使用

  • 问题内容: 我正在尝试配置log4j以将消息记录到文件中。现在,确实使用我提供的名称创建了该文件,但是日志未写入该文件。我的代码: 我文件的内容: 运行此命令时,将在控制台中获得以下输出: 该文件确实在我的主目录中创建。但是它是空的。 有什么想法我做错了吗?我正在使用log4j 1.2.17版。 问题答案: 输出似乎是Java标准日志记录框架(JUL)发出的默认格式。 因此,有两种可能性(想到):

  • 我不清楚java程序是如何知道xml文件的位置的。我想这就是问题所在。这就是我在代码中的设置, 任何帮助都是徒劳的。谢了。

  • 我是log4j的新手。我创建了一个在其中实现log4j的示例java程序。 下面是java程序: 我正在控制台屏幕上获取输出。但是没有生成日志文件。我还使用以下链接在Eclipse neon中配置了我的项目:配置 我做了一切好事。但是日志文件没有生成。当我以编程方式实现log4j时,文件正在生成。以下是我的属性文件: 我需要做什么才能让Log4J写入日志文件?

  • 使用log4j library 1.1.4和slf4j-api 1.7.25在我的应用程序中进行日志记录可以很好地工作。 但是在将log4j库从1.1.4版本更新到1.1.5(或更高版本)之后,日志文件只会停止创建,不会产生任何异常或警告。即使是1.1.5版本也相当老,所以我宁愿使用更新的版本。配置的工作方式一定发生了变化,但我找不到是什么。 这段简单的代码将在Log4J1.1.4中创建滚动日志文