Log4j2 文件已创建但未写入日志

Cod*_*tro 5 logging log4j2 spring-boot

我已将 log4j2 与 springboot 一起使用,日志文件已创建,但日志未写入文件中。

log4j2.属性

name=PropertiesConfig
property.filename = /export/home/apps/logs
appenders = console, file

appender.console.type = Console
appender.console.name = STDOUT
appender.console.layout.type = PatternLayout
appender.console.layout.pattern = [%-5level] %d{yyyy-MM-dd HH:mm:ss.SSS} [%t] %c{1} - %msg%n

appender.file.type = File
appender.file.name = LOGFILE
appender.file.fileName=${filename}/app-frontend.log
appender.file.layout.type=PatternLayout
appender.file.layout.pattern=[%-5level] %d{yyyy-MM-dd HH:mm:ss.SSS} [%t] %c{1} - %msg%n

loggers=file
logger.file.name=guru.springframework.blog.log4j2properties
logger.file.level = debug
logger.file.appenderRefs = file
logger.file.appenderRef.file.ref = LOGFILE

rootLogger.level = debug
rootLogger.appenderRefs = stdout
rootLogger.appenderRef.stdout.ref = STDOUT
Run Code Online (Sandbox Code Playgroud)

pom.xml

<dependencies>
        <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-test</artifactId>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-log4j2</artifactId>
        </dependency>
    </dependencies>
Run Code Online (Sandbox Code Playgroud)

使用记录器的方法

private static Logger logger = LogManager.getLogger();

    @RequestMapping(value="/check", method = RequestMethod.GET)
    public String healthCheck() {

        logger.debug("Health-check invoked");

        return "Hey, I am fine";
    }
Run Code Online (Sandbox Code Playgroud)

上面我提到了我使用过的代码。还是找不到解决的办法。日志甚至没有出现在控制台中。

Ame*_*n.M 4

在 spring-boot 中使用“log4j2.properties”进行配置有一定的局限性。Log4J 2 最初发布时不支持通过属性文件进行配置。从 Log4J 2.4 开始,再次添加了对属性文件的支持,但语法完全不同。如文档中所述

从版本 2.4 开始,Log4j 现在支持通过属性文件进行配置。请注意,属性语法与 Log4j 1 中使用的语法不同。

从版本 2.6 开始,不再需要此标识符列表,因为名称是在首次使用时推断的,但是如果您希望使用更复杂的标识符,则仍然必须使用该列表。如果该列表存在,则会使用该列表。

从 Spring Boot 版本 1.4.0 开始,使用的 log4j2 api 版本是 2.6.2。请注意,spring-boot 使用 slf4j api 来支持多个底层日志框架。在对 log4j2 使用基于属性的配置而不与 slf4j 绑定的类路径依赖项打交道时,似乎存在问题。

使用基于 XML(或 yaml/json)的配置来实现相同的目的并启用 log4j2 能够使用的所有功能是有意义的。

以下是相同属性的基于 xml 的配置。

log4j2.xml

<?xml version="1.0" encoding="UTF-8"?>
<Configuration monitorInterval="60">
<Properties>
    <Property name="filename">export/home/apps/logs</Property>
</Properties>
<Appenders>
    <Console name="STDOUT" target="SYSTEM_OUT">
      <PatternLayout pattern="[%-5level] %d{yyyy-MM-dd HH:mm:ss.SSS} [%t] %c{1} - %msg%n"/>
    </Console>
    <File name="LOGFILE"
        fileName="${filename}/app-frontend.log">
        <PatternLayout pattern="[%-5level] %d{yyyy-MM-dd HH:mm:ss.SSS} [%t] %c{1} - %msg%n"/>
    </File>
</Appenders>
<Loggers>

    <Logger name="guru.springframework.blog.log4j2properties" level="debug">
        <AppenderRef ref="LOGFILE"
            level="debug" />
    </Logger>
    <Root level="debug">
        <AppenderRef ref="STDOUT"/>
    </Root>
</Loggers>
Run Code Online (Sandbox Code Playgroud)