是否对 BeanCreationException / ApplicationContext 加载问题有更友好的看法

2024-01-01

诊断弹簧接线问题通常涉及挖掘堆栈跟踪中的很长的消息,如下所示:

Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'foo' defined in class path resource [blah/blah/Foo.class]: Bean instantiation via factory method failed; nested exception is org.springframework.beans.BeanInstantiationException: Failed to instantiate [blah.blah.Foo]: Factory method 'foo' threw exception; nested exception is ... [five more of these because your wiring is Byzantine] nested exception is [your real problem]

是否有任何工具/技术可以让您更轻松地看到这些错误?最愚蠢的痛点主要在于,该消息是一个非常长的行,在 IDE 控制台(在本例中为 IntelliJ)中滚动到右侧,而妙语始终位于末尾。

我正在想象可能是一个用于更友好的堆栈跟踪显示的插件,或者可能是具有特定 spring 智能的东西。


经过一些研究和 @klorand 的建议,我发现了三种改进 IntelliJ 显示堆栈跟踪方式的方法:

  1. 您可以点击“使用软包装”窗口右侧的图标。这将防止水平滚动,从而使任何超出窗口宽度的信息显示在新行上。

  2. IntelliJ上有一个配置叫做控制台折叠 https://www.jetbrains.com/help/idea/2018.2/settings-console-folding.html。您可以为 IntelliJ 指定过滤器以隐藏堆栈跟踪中的某些包。只需单击“调试”窗口上堆栈的任意行并选择“像这样折叠线”。这将打开一个与此类似的配置窗口:

    在此示例中,所有包含以下内容的控制台行at sun.reflect将被折叠。我一直在不断添加新的过滤器,并使用此配置使我的堆栈跟踪在垂直方向上更小。

  3. 您可以使用Logback https://www.codingame.com/playgrounds/4497/configuring-logback-with-spring-boot自定义日志在控制台中显示的方式。我在我的上使用了以下配置logback.xml https://pastebin.com/r6FaAgQr文件来截断控制台上记录的所有警告和错误消息。和format https://logback.qos.ch/manual/layouts.html#formatModifiers配置您可以指定最小/最大宽度和对齐方式。我隐藏了包和方法信息,以便只显示核心消息,但您也可以指定要显示的字符数限制,甚至自定义一个定制转换器 https://logback.qos.ch/manual/layouts.html#customConversionSpecifier.

Before:

After:

Finally

组合这三个配置设置将帮助您使控制台消息在垂直或水平方向上更小,并更好地控制日志消息的显示或控制台方式,或保存到文件中。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

是否对 BeanCreationException / ApplicationContext 加载问题有更友好的看法 的相关文章

  • 类型已知,但方法指的是缺失类型

    我对 java 和 Eclipse 不太有经验 但遇到以下问题 我正在写类似的东西 Point3D myPoint myClass myMethod arg 我收到错误 方法 myMethod myType arg 引用缺失的类型 Poin
  • java 中的梵文 i18n

    我正在尝试使用来自互联网的示例 ttf 文件在 java 中使用 i18n 进行梵文 印地文 我可以加载资源包条目 还可以加载 ttf 并设置字体 但它不会根据需要呈现 jlabel 它显示块代替字符 如果我在 Eclipse 中调试 我可
  • 如何从 Java 访问 Windows 设备管理器中的信息?

    我有一个串行 USB 设备 并且其中多个设备可以连接到计算机 我需要查询和检索设备连接到的 COM 端口列表 在 Windows 设备管理器中 您可以获得当前连接的设备的 COM 端口 友好名称 该列表是动态的 从注册表中读取不工作 htt
  • FileObserver 不适用于 Android 6.0 Marshmallow (API 23) 中的外部存储

    我有一个应用程序可以观察外部存储上的公共目录FileObserver 它运行良好Lollipop设备 我想添加对Marshmallow 所以我用它设置了一台 Nexus 9 平板电脑 在 Marshmallow 设备上 它失败 在 Loll
  • 在拇指上方显示修改后的 JSlider 值

    有没有一种简单的方法可以在使用某些 外观和感觉 的同时更改 JSlider 上方标签中显示的值 为了清楚起见 我正在谈论这个值 具体来说 我想显示除以 1000 的值而不是值本身 我知道如果我显示它们 我可以为刻度设置标签 但用户将不得不猜
  • 但是创建静态实用方法不应该被过度使用吗?如何避免呢? [关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 随着时间的推移 java项目中引入了许多实用方法来完成更复杂和简单的任务 当使用静态方法时 我们在代码中引入了紧密耦合 这使得我们的代
  • for循环中更新JLabel的问题

    我的程序的想法是从之前在其他 JFrame 中保存的列表中选择一个名称 我想在标签中一个接一个地打印所有名称 它们之间有很小的延迟 然后停在其中一个名称上 问题是lbl setText String 如果有多个则不起作用setText co
  • 从 CLI 部署 Maven 项目?

    在 IDE 中构建并运行良好 cd home thufir NetBeansProjects HelloMaven JAVA HOME usr lib jvm java 8 openjdk amd64 home thufir local s
  • 如何让“循环”泛型在 Java 中工作?

    我在编译以下涉及一些泛型的代码时遇到错误 public abstract class State
  • ActiveMQ JNDI 查找问题

    尝试使用 JNDI 运行以下 ActiveMQ http activemq apache org jndi support html http ActiveMQ 20JNDI 并且我的 jboss server node lib 文件夹中有
  • 如何使用 Java 在 selenium webdriver 中打开新选项卡或如何使用使用 selenium webdriver 的操作类在 selenium 中按 ctrl +T [重复]

    这个问题在这里已经有答案了 如何使用 Java 在 Selenium Webdriver 中按 CTRL T 或者 如何使用 Java 在 selenium webdriver 中打开新选项卡 简单步骤 1 打开google com 不必触
  • JPA Web 应用程序管理策略

    我们目前正在开发一个 J2EE Web 应用程序 使用 JPA 作为我们的数据访问层 我们目前正在研究几种不同的策略来在我们的应用程序中利用缓存 Create an EntityManager per request 在请求范围内获取缓存
  • Java 8 方法签名不一致

    Java 8 为我们提供了具有很长签名的新方法 如下所示 static
  • Hibernate 标准接受 %% 值

    我正在使用下面的 Hibernate 代码来过滤workFlowName crt add Restrictions like workFlowName workFlow MatchMode ANYWHERE crt is the crite
  • 获取 Future 对象的进度的能力

    参考 java util concurrent 包和 Future 接口 我注意到 除非我弄错了 只有 SwingWorker 实现类才能启动冗长的任务并能够查询进度 这就引出了以下问题 有没有办法在非 GUI 非 Swing 应用程序 映
  • 为什么 java.util.Arraylist#clear 按照 OpenJDK 中的方式实现?

    http grepcode com file repository grepcode com java root jdk openjdk 6 b14 java util ArrayList java 473 http grepcode co
  • 为什么不能在 if 语句中声明变量?

    以下 Java 代码无法编译 int a 0 if a 1 int b 0 if a 1 b 1 为什么 不能有任何代码路径导致程序将 1 分配给b无需先声明 我突然想到b的变量范围可能仅限于第一个if声明 但后来我不明白为什么 如果我实在
  • Java 中序列化的目的是什么?

    我读过很多关于序列化的文章 以及它如何如此美好和伟大 但没有一个论点足够令人信服 我想知道是否有人能真正告诉我通过序列化一个类我们真正可以实现什么 让我们先定义序列化 然后我们才能讨论它为什么如此有用 序列化只是将现有对象转换为字节数组 该
  • Java时区混乱

    我正在运行 Tomcat 应用程序 并且需要显示一些时间值 不幸的是 时间快到了 还有一个小时的休息时间 我调查了一下 发现我的默认时区被设置为 sun util calendar ZoneInfo id GMT 08 00 offset
  • 如何使用socket.io发送图像文件(二进制数据)?

    我无法从以下位置发送数据Android Client to NodeJS Server I use Socket IO 客户端 https github com socketio socket io client java我的客户端中的ja

随机推荐