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

SpringBoot中如何正确激活Log4j2的ScriptSupport功能?

解决SpringBoot中Log4j2 ScriptFilter脚本支持未激活的问题

核心原因

Log4j2的log4j2.Script.enableLanguages系统属性必须在Log4j2日志系统初始化之前被设置,否则属性不会生效。如果启动参数位置不对或者Spring Boot加载顺序导致属性设置滞后,就会出现Script support is not enabled错误。

可行解决方案

1. 确保JVM启动参数的正确位置

如果用命令行启动jar包,必须把-D参数放在-jar之前,否则会被当作应用程序参数而非JVM系统参数:

java -Dlog4j2.Script.enableLanguages=javascript -jar your-springboot-app.jar

如果用IDE开发,要在VM Options(而非Program Arguments)里添加该参数:

  • IntelliJ:Run/Debug Configurations → 选择你的应用 → VM options 栏输入-Dlog4j2.Script.enableLanguages=javascript
  • Eclipse:Run Configurations → Java Application → Arguments → VM arguments 栏输入上述参数

2. 在Spring Boot启动前手动设置系统属性

直接在应用启动类的main方法中,先设置系统属性再启动Spring Boot,确保Log4j2初始化前属性已生效:

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication
public class YourApplication {
    public static void main(String[] args) {
        // 先设置Log4j2脚本支持属性
        System.setProperty("log4j2.Script.enableLanguages", "javascript");
        // 再启动Spring应用
        SpringApplication.run(YourApplication.class, args);
    }
}

3. 检查并补充脚本语言依赖

如果使用JDK9及以上版本,Nashorn JavaScript引擎已被移除,需要手动引入依赖(以Maven为例):

<dependency>
    <groupId>org.openjdk.nashorn</groupId>
    <artifactId>nashorn-core</artifactId>
    <version>15.4</version> <!-- 选择适配你JDK版本的版本号 -->
</dependency>

JDK8自带Nashorn,无需额外依赖,但要确保log4j-core依赖已正确引入:

<dependency>
    <groupId>org.apache.logging.log4j</groupId>
    <artifactId>log4j-core</artifactId>
</dependency>

4. 验证属性是否生效

可以在启动类中添加一行打印,确认系统属性是否被正确读取:

System.out.println("当前log4j2脚本支持语言: " + System.getProperty("log4j2.Script.enableLanguages"));

启动后如果控制台输出javascript,说明属性已生效,再检查ScriptFilter的配置是否正确。

内容的提问来源于stack exchange,提问作者Helotrix

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.04 20:01:13