Spring Boot 中的记录器问题

Posted

技术标签:

【中文标题】Spring Boot 中的记录器问题【英文标题】:Logger issue in Spring Boot 【发布时间】:2019-01-13 01:31:43 【问题描述】:

我已经使用log4j2.properties 文件在 Spring Boot 应用程序中实现了 Logging。

请在下面的参考网址中找到代码:

Spring Boot - log4j2.properties creating log files but not writing the logs in file

控制台日志记录正在工作,并且正在创建文件,其中一个日志正在写入文件,但其他日志没有写入文件。

请在控制台中找到记录器的不同之处,如下所示:

[INFO ] 2018-08-06 11:48:05.609 [restartedMain] DemoApplication                  - Logger enabled: Entering main //this log is writing into file.

2018-08-06 11:48:14.211  INFO 10788 --- [  restartedMain] c.j.c.DemoApplication                  : **** Demo Application Started *****// this is not writing into file.

但对于两者都使用 log.info 来打印记录器。

谁能帮忙解决这个问题。

【问题讨论】:

在参考 url 中,为文件记录器配置了以下包:com.java.app,但在您的示例中,包似乎不同。您是否使用正确的包名称编辑了 log4j.properties? 不,我使用的是同一个包,但是在具有 2 个记录器的演示应用程序类中,一个在 SpringApplication.run(DemoApplication.class, args); 之上,另一个在上述语句之下。但在控制台中打印的记录器有一些差异,如上所示。并且一个记录器正在写入文件,而另一个记录器没有写入文件。现在我在参考 url 中也更新了包信息。请检查并帮助我。谢谢@Andrei Prakhov 【参考方案1】:

您必须仔细检查您的 log4j2.properties 文件。我已经用您的示例进行了测试,并且以下配置可以正常工作:

name=PropertiesConfig
appenders = console, file
appender.console.type = Console
appender.console.name = STDOUT
appender.console.layout.type = PatternLayout
appender.console.layout.pattern = [%-5level] %dyyyy-MM-dd HH:mm:ss.SSS [%t] %c1 - %msg%n
appender.file.type = File
appender.file.name = LOGFILE
appender.file.fileName=demo.log
appender.file.layout.type=PatternLayout
appender.file.layout.pattern=[%-5level] %dyyyy-MM-dd HH:mm:ss.SSS [%t] %c1 - %msg%n
loggers=file
logger.file.name=com.testsexample.test5
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   

主类如下(包名应该对应log4j2.properties中的logger.file.name属性):

package com.testsexample.test5;

import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication
public class Test5Application 

    private final static Logger LOG = LogManager.getLogger(Test5Application.class);

    public static void main(String[] args) 

        LOG.info("Logger enabled: Entering main \n\n");
        SpringApplication.run(Test5Application.class, args);
        LOG.info("**** Demo Application Started *****");
    

项目结构为:

奇怪,但我在几次重新启动后重现了您的问题。请尝试用以下 log4j2.xml 替换 log4j2.properties - xml 配置问题已解决

<?xml version="1.0" encoding="UTF-8"?>
<Configuration status="INFO">
    <Properties>
        <Property name="log-path">logs</Property>
        <Property name="LOG_PATTERN">
            [%-5level] %dyyyy-MM-dd HH:mm:ss.SSS [%t] %c1 - %msg%n
        </Property>
    </Properties>
    <Appenders>
        <Console name="ConsoleAppender" target="SYSTEM_OUT">
            <PatternLayout pattern="$LOG_PATTERN"/>
        </Console>
        <File name="FileAppender" fileName="demo.log">
            <PatternLayout>
                <pattern>
                    [%-5level] %dyyyy-MM-dd HH:mm:ss.SSS [%t] %c1 - %msg%n
                </pattern>
            </PatternLayout>
        </File>
    </Appenders>
    <Loggers>
        <Root level="INFO">
            <AppenderRef ref="FileAppender"/>
            <AppenderRef ref="ConsoleAppender"/>
        </Root>
    </Loggers>
</Configuration>

对于每日滚动附加程序,它将是:

<RollingFile name="FileAppender" fileName="demo.log" filePattern="demo %dyyyy-MM-dd.log">
        <PatternLayout>
            <pattern>
                [%-5level] %dyyyy-MM-dd HH:mm:ss.SSS [%t] %c1 - %msg%n
            </pattern>
        </PatternLayout>
        <Policies>
            <TimeBasedTriggeringPolicy interval="1" modulate="true"/>
        </Policies>
    <DefaultRolloverStrategy></DefaultRolloverStrategy>
    </RollingFile>

【讨论】:

仍然得到CteappApplication - Logger enabled: Entering main,只是没有得到其他记录器,如下面的SpringApplication.run(Test5Application.class, args);。你在日志中看到这个**** Demo Application Started ***** 了吗?谢谢。 @Andrei Prakhov 在几次重新启动后,我也错过了 **** Demo Application Started *****,这很奇怪。用 xml 替换配置后,日志记录再次正常工作。 是的,logj2.xml 工作正常,但我们需要每天滚动附加程序。 log4j2.xml 可以吗?谢谢。 @Andrei Prakhov 是的,这是可能的,你只需要不同的 appender 类型(见上面编辑过的帖子) 我应该将它添加到上面的附加程序中还是应该用上面的文件附加程序替换?当我指向本地目录以将日志文件设置为“C:\\Logs”并且它不起作用时。谢谢@Andrei Prakhov

以上是关于Spring Boot 中的记录器问题的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Spring Boot 中以内存高效的方式迭代 MySQL 中的大量记录

Spring Boot 日志记录覆盖颜色

Spring Boot application.properties 中的日志级别问题

更新数据库中的记录时,Spring Boot“只读集合不支持操作”

删除表中的每条记录时重新启动Id = 1? (角度 + Spring Boot + MySQL)

Spring Boot JPA,存储库不删除记录