Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 对于Spring Framework记录的缺少文件资源的FileNotFoundException,是否有一种方法可以获得更简洁/可读的异常?_Java_Spring_Exception Handling - Fatal编程技术网

Java 对于Spring Framework记录的缺少文件资源的FileNotFoundException,是否有一种方法可以获得更简洁/可读的异常?

Java 对于Spring Framework记录的缺少文件资源的FileNotFoundException,是否有一种方法可以获得更简洁/可读的异常?,java,spring,exception-handling,Java,Spring,Exception Handling,当问题只是缺少文件资源时,Spring生成的堆栈跟踪又大又丑: 11:25:09.757 [main] INFO c.m.m.MarketDataProvider - Starting service: MarketDataProvider Exception in thread "main" org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'marketDataPro

当问题只是缺少文件资源时,Spring生成的堆栈跟踪又大又丑:

11:25:09.757 [main] INFO  c.m.m.MarketDataProvider - Starting service: MarketDataProvider
Exception in thread "main" org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'marketDataProvider' defined in file [C:\projects\myproj\assembly\target\myproj-dev\config\marketdata-ctx.xml]: Invocation of init method failed; nested exception is java.lang.IllegalStateException: Cannot load list of symbols at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1420)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:519)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:456)
    at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:291)
    at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:222)
    at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:288)
    at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:190)
    at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1075)
    at com.myproj.marketdata.MarketDataProvider.getBean(MarketDataProvider.java:38)
    at com.myproj.marketdata.MarketDataSubscriber.main(MarketDataSubscriber.java:49)
Caused by: java.lang.IllegalStateException: Cannot load list of symbols
    at com.myproj.marketdata.MarketDataProvider.start(MarketDataProvider.java:56)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
    at java.lang.reflect.Method.invoke(Unknown Source)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeCustomInitMethod(AbstractAutowireCapableBeanFactory.java:1544)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1485)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1417)
    ... 9 more
Caused by: com.myproj.marketdata.SymbolLoaderException: Unable to load symbols file java.io.FileNotFoundException: File 'var/staticData/symbols.txt' not found using search path [file:/C:\projects\myproj\assembly\target\myproj-dev/].  Make sure the location is specified relative to the search path.
    at com.myproj.marketdata.SymbolsFileLoader.load(SymbolsFileLoader.java:37)
    at com.myproj.marketdata.MarketDataProvider.start(MarketDataProvider.java:48)
    ... 16 more
问题是我们的ops团队很难解析这个巨大的堆栈跟踪。他们经常错过堆栈底部的
java.io.FileNotFoundException:File'var/staticData/symbols.txt'


虽然一个显而易见的解决方案是“训练您的ops团队阅读Java异常”,但我更希望Spring框架能够为缺少的文件资源生成更简洁的错误。是否有这样一个选项,或者我需要编写某种自定义文件资源适配器来“预筛选”它们,并在将它们传递给Spring之前验证它们是否存在?

您是否考虑过为此创建自己的日志实现


目前还不清楚您使用的是哪个日志系统,但在所有这些系统中,您都可以创建自己的日志输出处理程序。该日志处理程序接收异常实例。您可以在附加的异常中循环查找您要查找的FileNotFound异常。如果你发现了这一点,你可以用一种方式记录它,把这个特殊的问题带到最上面。(出于调试目的,我也会打印堆栈跟踪,但会将其放在错误下方)。

我不这么认为。顺便说一句,在您的情况下,您就是在
IllegalStateException
中包装
FileNotFoundException
的人

“问题”不是弹簧。这就是例外情况的工作方式——它们会冒出气泡,直到有人抓住它们。然后,他可能会选择重新包装或包装它们。Spring包装了在..中创建bean的失败
BeanCreationException
-非常符合逻辑


有一点是不可取的,但有助于缩短堆栈跟踪的,那就是您不重新显示异常-在
init()
方法中捕获
FileNotFoundException
,并将其记录为
fatal
。让你的豆子和平地继续创造。这就是“捕获和记录”方法(并不总是被认为是一个好的实践;)

这就是外观(我也使用它)。哪个日志框架正在进行繁重的工作?这就是日志输出被格式化的地方-这就是你需要修改输出的地方。你需要实现
AbstractLoggingAwaRestringBean预览WolverineGuillotinedRamineHeadExplodingExceptionBloviationFilter
。这让我在我们的工作场所笑了