Log4j 更改WebMethod引发的异常的记录器

Log4j 更改WebMethod引发的异常的记录器,log4j,wildfly,Log4j,Wildfly,我有一个Web服务项目在Wilffly 8中作为.ear运行。这个web服务应该有自己的日志文件,我在log4j属性中定义了它。这对于来自项目内部的日志调用非常有效 private static final Logger logger = Logger.getLogger("myLogger"); @WebMethod public void doSomething() { try { foo(); } catch (MyException e) {

我有一个Web服务项目在Wilffly 8中作为.ear运行。这个web服务应该有自己的日志文件,我在log4j属性中定义了它。这对于来自项目内部的日志调用非常有效

private static final Logger logger = Logger.getLogger("myLogger");

@WebMethod
public void doSomething() {
    try {
        foo();
    } catch (MyException e) {
        // This goes to the log file specified in root logger
        logger.error("Oh noes!", e);
    }
}
但是,如果WebMethod本身抛出异常,它将转到Wildfly日志

@WebMethod
public void doSomething() throws MyException {
    // When MyException is thrown, it goes to Wildfly log instead of my specified log
    foo();
}
有没有办法也将该异常写入我的自定义日志文件?我已经想过这样手动操作:

private static final Logger logger = Logger.getLogger("myLogger");

@WebMethod
public void doSomething() throws MyException {
    try {
        foo();
    } catch (MyException e) {
        logger.error("Oh noes!", e);
        throw e;
    }
}

但这样一来,它会同时出现在两个日志中,我也希望它不会出现在Wildfly日志中。

我认为这可能是一个bug。是否只包含log4j.properties文件并允许服务器配置日志管理器?@JamesR.Perkins是的,我的ear项目有自己的log4j.xml。据我所知,这是覆盖每个部署的Wildfly默认日志记录的正确(简单)方法。一个描述了这对于显式的
记录器
调用很好。
@WebMethod
public void doSomething() throws MyException {
    // When MyException is thrown, it goes to Wildfly log instead of my specified log
    foo();
}