应用启动出现冗余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。
具体解决步骤
添加日志配置文件
在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>如果使用其他日志框架
- 若使用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>
- 若使用Log4j2,创建
可选:指定日志实现依赖
如果你希望统一日志实现,可以在pom.xml中添加具体的日志依赖(比如Logback),确保依赖传递的日志实现被覆盖:<dependency> <groupId>ch.qos.logback</groupId> <artifactId>logback-classic</artifactId> <version>1.2.11</version> </dependency>
内容的提问来源于stack exchange,提问作者Никита Мозолевский
相关产品推荐
相关产品推荐

