在 Spring Boot 应用程序中未针对休眠和弹簧过滤 Log4j2 日志级别

Posted

技术标签:

【中文标题】在 Spring Boot 应用程序中未针对休眠和弹簧过滤 Log4j2 日志级别【英文标题】:Log4j2 log levels not being filtered for hibernate and spring in Spring Boot application 【发布时间】:2016-12-15 16:26:00 【问题描述】:

我已根据this 手册将 Spring Boot 配置为使用 Log4j2。我想按 Root 记录器中设置的级别过滤所有日志。这是我的 log4j2-spring.xml 文件:

<?xml version="1.0" encoding="UTF-8"?>
<Configuration>
    <Properties>
        <Property name="LOG_PATTERN">%dHH:mm:ss.SSS [%t] %-5level %logger36 -s %msg%n</Property>
    </Properties>
    <Appenders>
        <Console name="Console">
            <PatternLayout pattern="$LOG_PATTERN"/>
        </Console>
        <File name="File" fileName="app.log">
            <PatternLayout pattern="$LOG_PATTERN"/>
        </File>
        <SMTP name="Mail"
              ...
        >
            <ThresholdFilter level="ERROR" onMatch="ACCEPT"/>
            <PatternLayout pattern="$LOG_PATTERN"/>
        </SMTP>
    </Appenders>
    <Loggers>
        <Root level="INFO">
            <AppenderRef ref="Console"/>
            <AppenderRef ref="File"/>
            <AppenderRef ref="Mail"/>
        </Root>
    </Loggers>
</Configuration>

问题是我仍然看到来自 hibernate 和 spring 框架的 DEBUG 输出。我设法通过为某些条目指定完整的包名称来过滤单个日志,如下所示:

<Loggers>
    <Logger name="org.springframework.boot.context.web" level="INFO" />
    <Root level="INFO">
        <AppenderRef ref="Console"/>
        <AppenderRef ref="File"/>
        <AppenderRef ref="Mail"/>
    </Root>
</Loggers>

当然,对所有软件包都这样做是不可行的。感谢您的帮助!

【问题讨论】:

【参考方案1】:

终于修好了。问题是我在 application.properties 文件中有一行 debug=true 并且 log4j2-spring.xml 配置中的过滤器被简单地忽略了。

【讨论】:

以上是关于在 Spring Boot 应用程序中未针对休眠和弹簧过滤 Log4j2 日志级别的主要内容,如果未能解决你的问题,请参考以下文章

在 spring-boot Web 应用程序中未考虑 web.xml 会话超时?

Spring Boot Data JPA:休眠会话问题

使用休眠空间配置 Spring Boot

Spring Boot 在关闭时关闭休眠会话 - 在 @Async 方法完成之前

发送 post 请求时出现 CORS 错误,但在 Spring Boot 和 Reactjs 中未获取请求

带有休眠应用程序的 Spring Boot 无法启动