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

Wildfly 14.0集成AspectJ无日志输出问题求助

问题:WildFly 14.0中AspectJ切面日志不输出

我在基础HelloWorld Servlet项目中尝试使用AspectJ,部署到WildFly 14.0后,控制台看不到MyAspect类的日志输出,不确定是代码还是WildFly配置需要调整。相关代码和项目结构如下:

MyAspect类

@Aspect
public class MyAspect {

    static Logger logger = Logger.getLogger("MyAspect");

    @Before("execution(* org.jboss.as.quickstarts.helloworld.HelloService.*(..))")
    public void testModeOnlyMethods() {
        logger.info("AspectLog");
    }
} 

HelloWorldServlet类

public class HelloWorldServlet extends HttpServlet {

    static String PAGE_HEADER = "<html><head><title>helloworld</title></head><body>";

    static String PAGE_FOOTER = "</body></html>";

    @Inject
    HelloService helloService;

    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        resp.setContentType("text/html");
        PrintWriter writer = resp.getWriter();
        writer.println(PAGE_HEADER);
        writer.println("<h1>" + helloService.createHelloMessage("World") + "</h1>");
        writer.println(PAGE_FOOTER);
        writer.close();
    }

}

HelloService类

public class HelloService {

    static Logger logger = Logger.getLogger("HelloService");

    String createHelloMessage(String name) {
        logger.info("Aspect");
        return "Hello " + name + "!";
    }
}

项目结构

├── src/
│   ├── main/
│   │   ├── java/
│   │   │   └── org/
│   │   │       └── jboss/
│   │   │           └── as/
│   │   │               └── quickstarts/
│   │   │                   └── helloworld/
│   │   │                       ├── HelloWorldServlet.java
│   │   │                       ├── HelloService.java
│   │   │                       └── MyAspect.java
│   │   └── webapp/
│   │       └── WEB-INF/
│   │           └── web.xml
└── pom.xml

解决步骤

要让AspectJ在WildFly 14.0中生效,需从代码配置、依赖管理和容器配置三方面调整:

1. 代码调整

  • 给MyAspect添加CDI注解(如@Named),让容器管理切面类:
@Aspect
@Named
public class MyAspect {
    // 原有代码不变
}
  • 修改HelloService的createHelloMessage方法为public修饰符,AspectJ默认对非public方法的拦截支持有限:
public String createHelloMessage(String name) {
    // 原有代码不变
}

2. 依赖配置

在pom.xml中添加AspectJ核心依赖:

<dependencies>
    <!-- 其他依赖 -->
    <dependency>
        <groupId>org.aspectj</groupId>
        <artifactId>aspectjrt</artifactId>
        <version>1.9.6</version>
        <scope>runtime</scope>
    </dependency>
    <dependency>
        <groupId>org.aspectj</groupId>
        <artifactId>aspectjweaver</artifactId>
        <version>1.9.6</version>
    </dependency>
</dependencies>

3. WildFly容器配置

  • 开启AspectJ模块全局可见:编辑WILDFLY_HOME/standalone/configuration/standalone.xml,找到<subsystem xmlns="urn:jboss:domain:ee:4.0">节点,添加:
<global-modules>
    <module name="org.aspectj.aspectjrt" slot="main"/>
</global-modules>
  • 若WildFly中无AspectJ模块,需手动创建:
    1. 创建目录WILDFLY_HOME/modules/system/layers/base/org/aspectj/aspectjrt/main
    2. 在该目录下新建module.xml:
<?xml version="1.0" encoding="UTF-8"?>
<module xmlns="urn:jboss:module:1.3" name="org.aspectj.aspectjrt">
    <resources>
        <resource-root path="aspectjrt-1.9.6.jar"/>
    </resources>
    <dependencies>
        <module name="javax.api"/>
        <module name="javax.annotation.api"/>
        <module name="javax.ejb.api"/>
        <module name="javax.servlet.api"/>
    </dependencies>
</module>
  1. 将aspectjrt-1.9.6.jar放入上述目录

4. 编译时织入(可选)

若采用编译时织入,在pom.xml的<build>节点下添加AspectJ Maven插件:

<plugins>
    <plugin>
        <groupId>org.codehaus.mojo</groupId>
        <artifactId>aspectj-maven-plugin</artifactId>
        <version>1.14.0</version>
        <executions>
            <execution>
                <goals>
                    <goal>compile</goal>
                    <goal>test-compile</goal>
                </goals>
            </execution>
        </executions>
        <configuration>
            <source>1.8</source>
            <target>1.8</target>
            <aspectLibraries>
                <aspectLibrary>
                    <groupId>org.aspectj</groupId>
                    <artifactId>aspectjrt</artifactId>
                </aspectLibrary>
            </aspectLibraries>
        </configuration>
        <dependencies>
            <dependency>
                <groupId>org.aspectj</groupId>
                <artifactId>aspectjtools</artifactId>
                <version>1.9.6</version>
            </dependency>
        </dependencies>
    </plugin>
</plugins>

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.19 03:50:08