0

Log4j2配置无法使用Spring 5. 它在控制台上显示日志,但没有任何内容写入文件。但是文件正在生成,但它是空的。

pom.xml

<dependency>
    <groupId>org.apache.logging.log4j</groupId>
    <artifactId>log4j-api</artifactId>
    <version>2.3</version>
</dependency>
<dependency>
    <groupId>org.apache.logging.log4j</groupId>
    <artifactId>log4j-core</artifactId>
    <version>2.3</version>
</dependency>

src/main/resources/log4j2.xml

<?xml version="1.0" encoding="UTF-8"?>
    <Configuration status="warn">
        <Properties>
            <Property name="basePath">/apps/istore/logs</Property>
        </Properties>
        <Appenders>
            <RollingFile name="fileLogger" fileName="${basePath}/istore.log" filePattern="${basePath}/istore-%d{yyyy-MM-dd}.log">
                <PatternLayout>
                    <pattern>[%-5level] %d{yyyy-MM-dd HH:mm:ss.SSS} [%t] %c{1} - %msg%n</pattern>
                </PatternLayout>
                <Policies>
                    <TimeBasedTriggeringPolicy interval="1" modulate="true"/>
                </Policies>
            </RollingFile>
            <Console name="console" target="SYSTEM_OUT">
                <PatternLayout pattern="[%-5level] %d{yyyy-MM-dd HH:mm:ss.SSS} [%t] %c{1} - %msg%n"/>
            </Console>
        </Appenders>
        <Loggers>
            <Logger name="istore-logger" level="info" additivity="true">
                <appender-ref ref="fileLogger" level="info"/>
            </Logger>
            <Root level="info" additivity="false">
                <appender-ref ref="console"/>
            </Root>
        </Loggers>
    </Configuration>

MyFilter.java

import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;

public class MyFilter extends OncePerRequestFilter {

    private static final Logger logger = LogManager.getLogger(MyFilter.class);

    @Override
    protected void doFilterInternal(HttpServletRequest request,
                                    HttpServletResponse response,
                                    FilterChain filterChain) throws ServletException, IOException {

        logger.info("@@@@@@@@@@@@@@doFilterInternal");
        ...
        ...     
}   

控制台日志:

[INFO ] 2020-06-09 12:30:49.381 [http-nio-8080-exec-2] MyFilter - @@@@@@@@@@@@@@doFilterInternal
4

1 回答 1

0

您已经创建了一个名为“istore-logger”的 LoggerConfig。您创建了一个名为 MyFilter 的 Logger(您没有显示包语句,所以我假设它没有。当您登录 doFilterInternal 时,您正在登录到 MyFilter Logger。Log4j 将查找具有该名称的 Logger。没有。然后我将剥离最后一个标记并再次寻找匹配的记录器。字符串现在是“”,因此它将匹配根记录器并记录到控制台。

简而言之,您没有将任何内容记录到文件中,因为您没有任何与导致使用它的 LoggerConfig 名称匹配的记录器。

于 2020-06-11T22:26:54.880 回答