You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

应用启动出现冗余Thymeleaf DEBUG日志,求助排查来源

问题

应用启动时会输出大量不必要的Thymeleaf DEBUG级初始化日志,不清楚日志来源。当前pom.xml中未直接添加日志依赖,但此前添加后又删除日志依赖后,仍遗留这些日志。尝试移除所有日志依赖及日志配置文件,问题依旧。

日志内容

[2022-11-11 02:26:14,343] Artifact al_project1:war: Artifact is deployed successfully
[2022-11-11 02:26:14,343] Artifact al_project1:war: Deploy took 7,112 milliseconds
11.11.2022 14:26:15.931 [http-nio-8082-exec-1] DEBUG o.t.TemplateEngine - [THYMELEAF] INITIALIZING TEMPLATE ENGINE
11.11.2022 14:26:16.222 [http-nio-8082-exec-1] DEBUG o.t.T.CONFIG - Initializing Thymeleaf Template engine configuration...
[THYMELEAF] TEMPLATE ENGINE CONFIGURATION:
[THYMELEAF] * Thymeleaf version: 3.0.15.RELEASE (built 2022-01-31T00:00:31+0000)
[THYMELEAF] * Cache Manager implementation: org.thymeleaf.cache.StandardCacheManager
[THYMELEAF] * Template resolvers:
[THYMELEAF]     * org.thymeleaf.spring5.templateresolver.SpringResourceTemplateResolver
[THYMELEAF] * Message resolvers:
[THYMELEAF]     * org.thymeleaf.spring5.messageresolver.SpringMessageResolver
[THYMELEAF] * Link builders:
[THYMELEAF]     * org.thymeleaf.linkbuilder.StandardLinkBuilder
[THYMELEAF] * Dialect: SpringStandard (org.thymeleaf.spring5.dialect.SpringStandardDialect)
[THYMELEAF]     * Prefix: "th"
[THYMELEAF]     * Processors for Template Mode: HTML
[THYMELEAF]         * Element Tag Processors by [matching element and attribute name] [precedence]:
[THYMELEAF]             * [* {th:include,data-th-include}] [100]: org.thymeleaf.standard.processor.StandardIncludeTagProcessor
[THYMELEAF]             * [* {th:insert,data-th-insert}] [100]: org.thymeleaf.standard.processor.StandardInsertTagProcessor
[THYMELEAF]             * [* {th:replace,data-th-replace}] [100]: org.thymeleaf.standard.processor.StandardReplaceTagProcessor
[THYMELEAF]             * [* {th:substituteby,data-th-substituteby}] [100]: org.thymeleaf.standard.processor.StandardSubstituteByTagProcessor
[THYMELEAF]             * [* {th:each,data-th-each}] [200]: org.thymeleaf.standard.processor.StandardEachTagProcessor
[THYMELEAF]             * [* {th:switch,data-th-switch}] [250]: org.thymeleaf.standard.processor.StandardSwitchTagProcessor
[THYMELEAF]             * [* {th:case,data-th-case}] [275]: org.thymeleaf.standard.processor.StandardCaseTagProcessor
[THYMELEAF]             * [* {th:if,data-th-if}] [300]: org.thymeleaf.standard.processor.StandardIfTagProcessor
[THYMELEAF]             * [* {th:unless,data-th-unless}] [400]: org.thymeleaf.standard.processor.StandardUnlessTagProcessor
.......
[THYMELEAF]         * #httpServletRequest
[THYMELEAF]         * #httpSession
[THYMELEAF]         * #fields
[THYMELEAF]         * #themes
[THYMELEAF]         * #mvc
[THYMELEAF]         * #requestdatavalues
[THYMELEAF]     * Execution Attributes:
[THYMELEAF]         * "StandardExpressionParser": Standard Expression Parser
[THYMELEAF]         * "StandardJavaScriptSerializer": org.thymeleaf.standard.serializer.StandardJavaScriptSerializer@453e1f4
[THYMELEAF]         * "StandardCSSSerializer": org.thymeleaf.standard.serializer.StandardCSSSerializer@3f982a20
[THYMELEAF]         * "EnableSpringELCompiler": true
[THYMELEAF]         * "StandardVariableExpressionEvaluator": SpringEL
[THYMELEAF]         * "StandardConversionService": org.thymeleaf.spring5.expression.SpringStandardConversionService@2395c904
[THYMELEAF] TEMPLATE ENGINE CONFIGURED OK
11.11.2022 14:26:16.347 [http-nio-8082-exec-1] DEBUG o.t.TemplateEngine - [THYMELEAF] TEMPLATE ENGINE INITIALIZED

pom.xml内容

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
  <modelVersion>4.0.0</modelVersion>

  <groupId>spring.audiolessons.18_10.webapp</groupId>
  <artifactId>spring_audiolessons_18_10_webapp</artifactId>
  <version>1.0-SNAPSHOT</version>
  <packaging>war</packaging>

  <name>spring_audiolessons_18_10_webapp Maven Webapp</name>
  <url>http://www.example.com</url>

  <properties>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    <maven.compiler.source>17</maven.compiler.source>
    <maven.compiler.target>17</maven.compiler.target>

    <spring.version>5.3.23</spring.version>
    <encoding.type>UTF-8</encoding.type>
    <junit.jupiter.version>5.9.0</junit.jupiter.version>
    <junit.platform.version>1.9.0</junit.platform.version>

    <project.build.sourceEncoding>${encoding.type}</project.build.sourceEncoding>
    <project.reporting.outputEncoding>${encoding.type}</project.reporting.outputEncoding>
    <file.encoding>${encoding.type}</file.encoding>
  </properties>


  <dependencies>

    <dependency>
      <groupId>javax.servlet</groupId>
      <artifactId>javax.servlet-api</artifactId>
      <version>4.0.1</version>
      <scope>provided</scope>
    </dependency>

    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-core</artifactId>
      <version>${spring.version}</version>
    </dependency>

    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-context</artifactId>
      <version>${spring.version}</version>
    </dependency>

    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-web</artifactId>
      <version>${spring.version}</version>
    </dependency>

    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-webmvc</artifactId>
      <version>${spring.version}</version>
    </dependency>

    <dependency>
      <groupId>org.thymeleaf</groupId>
      <artifactId>thymeleaf-spring5</artifactId>
      <version>3.0.15.RELEASE</version>
    </dependency>

    <dependency>
      <groupId>org.springframework.data</groupId>
      <artifactId>spring-data-commons</artifactId>
      <version>2.7.5</version>
    </dependency>

    <dependency>
      <groupId>org.hibernate.validator</groupId>
      <artifactId>hibernate-validator</artifactId>
      <version>6.1.6.Final</version> <!--8.0.0.Final - Bullshit-->
    </dependency>

    <dependency>
      <groupId>org.postgresql</groupId>
      <artifactId>postgresql</artifactId>
      <version>42.5.0</version>
    </dependency>

    <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <version>4.13.2</version>
      <scope>test</scope>
    </dependency>

    <dependency>
      <groupId>org.junit.jupiter</groupId>
      <artifactId>junit-jupiter-engine</artifactId>
      <version>${junit.jupiter.version}</version>
      <scope>test</scope>
    </dependency>

    <dependency>
      <groupId>org.junit.jupiter</groupId>
      <artifactId>junit-jupiter-api</artifactId>
      <version>${junit.jupiter.version}</version>
      <scope>test</scope>
    </dependency>

    <dependency>
      <groupId>org.junit.jupiter</groupId>
      <artifactId>junit-jupiter-params</artifactId>
      <version>${junit.jupiter.version}</version>
      <scope>test</scope>
    </dependency>

    <dependency>
      <groupId>org.junit.platform</groupId>
      <artifactId>junit-platform-suite</artifactId>
      <version>${junit.platform.version}</version>
      <scope>test</scope>
    </dependency>

    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-jdbc</artifactId>
      <version>${spring.version}</version>
    </dependency>

    <dependency>
      <groupId>org.projectlombok</groupId>
      <artifactId>lombok</artifactId>
      <version>1.18.12</version>
      <scope>provided</scope>
    </dependency>

  </dependencies>

  <build>
    <finalName>spring_audiolessons_18_10_webapp</finalName>
    <pluginManagement><!-- lock down plugins versions to avoid using Maven defaults (maybe moved to parent pom) -->
      <plugins>
        <plugin>
          <artifactId>maven-clean-plugin</artifactId>
          <version>3.1.0</version>
        </plugin>
        <!-- see http://maven.apache.org/ref/current/maven-core/default-bindings.html#Plugin_bindings_for_war_packaging -->
        <plugin>
          <artifactId>maven-resources-plugin</artifactId>
          <version>3.0.2</version>
        </plugin>
        <plugin>
          <artifactId>maven-compiler-plugin</artifactId>
          <version>3.8.0</version>
        </plugin>
        <plugin>
          <artifactId>maven-surefire-plugin</artifactId>
          <version>2.22.1</version>
        </plugin>
        <plugin>
          <artifactId>maven-war-plugin</artifactId>
          <version>3.2.2</version>
        </plugin>
        <plugin>
          <artifactId>maven-install-plugin</artifactId>
          <version>2.5.2</version>
        </plugin>
        <plugin>
          <artifactId>maven-deploy-plugin</artifactId>
          <version>2.8.2</version>
        </plugin>
      </plugins>
    </pluginManagement>
  </build>
</project>

解决方案

日志来源说明

Thymeleaf依赖SLF4J日志抽象层,即使你没在pom.xml中直接添加日志依赖,thymeleaf-spring5也会通过依赖传递引入slf4j-api。而你的应用服务器(比如Tomcat)或者其他依赖(如Spring)可能默认提供了日志实现(比如JUL、Logback或Log4j),所以即使删除手动添加的日志依赖,依然会有日志输出,且默认级别可能为DEBUG。

具体解决步骤

  1. 添加日志配置文件
    在src/main/resources下创建日志配置文件(以Logback为例,创建logback.xml),将Thymeleaf相关包的日志级别调整为INFO或更高:

    <?xml version="1.0" encoding="UTF-8"?>
    <configuration>
        <appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender">
            <encoder>
                <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n</pattern>
            </encoder>
        </appender>
    
        <!-- 控制Thymeleaf日志级别 -->
        <logger name="org.thymeleaf" level="INFO"/>
        <logger name="org.thymeleaf.TemplateEngine" level="INFO"/>
    
        <root level="INFO">
            <appender-ref ref="CONSOLE"/>
        </root>
    </configuration>
    
  2. 如果使用其他日志框架

    • 若使用Log4j2,创建log4j2.xml,添加对应配置:
      <?xml version="1.0" encoding="UTF-8"?>
      <Configuration status="WARN">
          <Appenders>
              <Console name="Console" target="SYSTEM_OUT">
                  <PatternLayout pattern="%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n"/>
              </Console>
          </Appenders>
          <Loggers>
              <Logger name="org.thymeleaf" level="INFO"/>
              <Root level="INFO">
                  <AppenderRef ref="Console"/>
              </Root>
          </Loggers>
      </Configuration>
      
  3. 可选:指定日志实现依赖
    如果你希望统一日志实现,可以在pom.xml中添加具体的日志依赖(比如Logback),确保依赖传递的日志实现被覆盖:

    <dependency>
        <groupId>ch.qos.logback</groupId>
        <artifactId>logback-classic</artifactId>
        <version>1.2.11</version>
    </dependency>
    

内容的提问来源于stack exchange,提问作者Никита Мозолевский

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.13 08:55:31