gpt4 book ai didi

java - Spring MBeanExporter : Log an exception's stacktrace

转载 作者:行者123 更新时间:2023-11-30 09:53:52 25 4
gpt4 key购买 nike

在 Spring MVC 中,如果异常一直返回到框架(例如,如果存在 NullPointerException),则会记录异常的堆栈跟踪。是否有使用 Spring 的 MBeanExporter 来执行此操作的简单方法?

我知道我可以在方法中使用 try-catches 来执行此操作,但这会导致困惑。我检查了 Spring 文档(Chapter 22 是关于 JMX 的文档)但没有看到任何内容。我也没有在 SO 上看到任何东西。我还查看了 MBeanExporter 的源代码,似乎有一种方法可以为 MBean 注册注册监听器,但不能用于 MBean 请求处理。

最佳答案

在我基于 Spring 3.1 的应用程序中,@ManagedAttributes 和 @ManagedOperations 都没有被捕获或记录。

所以我经历了 MBeanExporter 的扩展,每当 MBean 方法调用失败时它就会失败:

public class LoggingFailedCallsMBeanExporter extends MBeanExporter {

protected ModelMBean createModelMBean() throws MBeanException {
// super method does:
// return (this.exposeManagedResourceClassLoader ? new SpringModelMBean() : new RequiredModelMBean());
ModelMBean superModelMBean = super.createModelMBean();

// but this.exposeManagedResourceClassLoader is not visible, so we switch on the type of the returned ModelMBean
if (superModelMBean instanceof SpringModelMBean) {
return new SpringModelMBean() {
@Override
public Object invoke(String opName, Object[] opArgs, String[] sig) throws MBeanException, ReflectionException {
try {
return super.invoke(opName, opArgs, sig);
} catch (MBeanException e) {
LOGGER.warn("Issue on a remote call", e);
throw e;
} catch (ReflectionException e) {
LOGGER.warn("Issue on a remote call", e);
throw e;
} catch (RuntimeException e) {
LOGGER.warn("Issue on a remote call", e);
throw e;
} catch (Error e) {
LOGGER.warn("Issue on a remote call", e);
throw e;
}
}
};
} else {
return new RequiredModelMBean() {
@Override
public Object invoke(String opName, Object[] opArgs, String[] sig) throws MBeanException, ReflectionException {
try {
return super.invoke(opName, opArgs, sig);
} catch (MBeanException e) {
LOGGER.warn("Issue on a remote call", e);
throw e;
} catch (ReflectionException e) {
LOGGER.warn("Issue on a remote call", e);
throw e;
} catch (RuntimeException e) {
LOGGER.warn("Issue on a remote call", e);
throw e;
} catch (Error e) {
LOGGER.warn("Issue on a remote call", e);
throw e;
}
}
};
}
}

关于java - Spring MBeanExporter : Log an exception's stacktrace,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3638900/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com