如何在 spring 引导应用程序 运行 时禁用日志消息?

How to disable log messages when spring boot application run?

这是我的 log4j2.xml 文件:

    <?xml version="1.0" encoding="UTF-8"?>
    <Configuration status="warn">
        <Properties>
            <Property name="basePath">/folderName/logs/</Property>
        </Properties>
    
        <Appenders>
            <RollingFile name="fileLogger" fileName="${basePath}/fileName.log"
                         filePattern="${basePath}/edf-info-%d{MM-yyyy-dd}.log">
                <PatternLayout>
                    <pattern>%d{MM-yyyy-dd} [%-5level] %l - %msg%n</pattern>
                </PatternLayout>
                <Policies>
                    <TimeBasedTriggeringPolicy interval="1" modulate="true"/>
                </Policies>
            </RollingFile>
            <Console name="console" target="SYSTEM_OUT">
                <PatternLayout>
                    <pattern>%d{MM-yyyy-dd} [%-5level] %l - %msg%n</pattern>
                </PatternLayout>
            </Console>
        </Appenders>
        <Loggers>
            <Logger name="com.company.projectName" level="info" additivity="true">
                <appender-ref ref="fileLogger" level="debug"/>
            </Logger>
            <Root level="info" additivity="false">
                <appender-ref ref="console"/>
            </Root>
        </Loggers>
    </Configuration>

当我使用以前版本的 Log4j2 时,只有我的应用程序发送的请求被写入我计算机上日志文件夹中的日志文件。例如:

12-2021-27 [INFO ] com.company.projectname.controller.ClassController.methodName(ClassController.java:21) - paramName1, paramname2
12-2021-27 [INFO ] com.company.projectname.service.ClassServiceImpl.methodName(ClassServiceImpl.java:21) - paramName1, paramname2

但是当我切换到新版本的 Log4j 时,由于漏洞,在我上面显示的消息之前,当我的 spring 引导项目运行时,它的消息也被写入。我的意思是关注关注。

12-2021-22 [INFO ] org.springframework.boot.StartupInfoLogger.logStarting(StartupInfoLogger.java:55) - Starting ProjectNameApplication using Java 1.8.0_111 on pc-name with PID 00000 (C:\Workspace\project-name\target\classes started by user.namein C:\Workspace\project-name)
12-2021-22 [INFO ] org.springframework.boot.SpringApplication.logStartupProfileInfo(SpringApplication.java:635) - No active profile set, falling back to default profiles: default
12-2021-22 [INFO ] org.springframework.boot.StartupInfoLogger.logStarted(StartupInfoLogger.java:61) - Started ProjectNameApplication in 8.858 seconds (JVM running for 12.962)

但我不想在我的日志文件中看到这些消息。我只想在生成请求和响应时编写消息,就像在我的配置之前一样。如何解决这个问题?我的意思是我只想将消息发送到我的请求和响应的日志文件。

那些不需要的消息使用 SpringApplication#getApplicationLog() to retrieve a logger, whose name is the fully qualified class name of your main class. The logger's name is probably a child of "com.company.projectName", hence it is sent to the file appender. You can confirm it by adding %c to your pattern layout

假设您的主 class 名为 com.company.projectName.Application,您可以:

  • 要么配置一个仅使用控制台附加程序的 com.company.projectName.Application 记录器:

    <Logger name="com.company.projectName.Application" level="INFO" additivity="false">
        <AppenderRef ref="console"/>
    </Logger>
    
  • 或将 com.company.projectName 记录器替换为更具体的记录器:

    <Logger name="com.company.projectName.controller" level="DEBUG">
        <AppenderRef ref="fileLogger" />
    </Logger>
    <Logger name="com.company.projectName.controller" level="DEBUG">
        <AppenderRef ref="fileLogger" />
    </Logger>