如何捕获ConfigurationParsingException?

如何捕获io.dropwizard.configuration.ConfigurationParsingException,以便正确记录它?

以某种方式绕过所有捕获块

public class App extends Application<AppConfig> {
  private static final Logger LOG = LoggerFactory.getLogger(App.class);


  @Override
  public void run(final AppConfig config,final Environment environment) {
    try {
      environment.jersey().register(new StatusResource());
      LOG.info("start-up");
    } catch (final Exception e) {
      LOG.error("start-up failed: {}",e.getMessage(),e);
    }
  }

  public static void main(String[] args) throws Exception {
    try {
      new App().run(args);
    } catch (final Exception e) {
      LOG.error("failed to create foo: {}",e);
    }
  }
}
jianggang158 回答:如何捕获ConfigurationParsingException?

查看DropWizard的文档,您所调用的方法均未引发任何异常。我敢说您调用的方法之一是处理抛出的错误,因此它不会向上传播到catch块。希望这会有所帮助。

,

在评论后添加: 在哪里捕获异常?

at io.dropwizard.cli.Cli.run(Cli.java:78)给了我们答案。

可以怎样实现目标:

release notes which are a long read中有PR №2260。这似乎正在解决上述问题:应用配置之前,在引导阶段以JSON格式登录。

这取决于是否配置dropwizard的日志并将其传输到ELK堆栈,它是否有用。如果使用本地日志文件,则应将StdErr和StdOut重定向到该文件。然后LogStash应该能够处理它们。如果使用一些直接的网络传输-我不知道。

第二次修改: 还有check command。用于验证配置设置。因此,它可以集成在部署工具链中的某处,以验证要部署的配置。

~/source/dropwizard-static$  java -jar target/dropwizard-static-1.0-SNAPSHOT.jar check config1.yml
config1.yml has an error:
  * Unrecognized field at: loging
    Did you mean?:
      - logging
      - assets
      - server
      - metrics
      - httpClient
        [1 more]

~/source/dropwizard-static$  java -jar target/dropwizard-static-1.0-SNAPSHOT.jar
usage: java -jar dropwizard-static-1.0-SNAPSHOT.jar
       [-h] [-v] {server,check} ...

positional arguments:
  {server,check}         available commands

named arguments:
  -h,--help             show this help message and exit
  -v,--version          show the application version and exit

原始答案如下:

我有一个玩具dropwizard项目here。当我尝试以损坏的配置启动它时:

#logging:
loging:
  level: INFO
#  level: DEBUG
  loggers:
    com.gitlab.zloster: DEBUG

我得到以下信息:

~/source/dropwizard-static$  java -jar target/dropwizard-static-1.0-SNAPSHOT.jar server config1.yml
io.dropwizard.configuration.ConfigurationParsingException: config1.yml has an error:
  * Unrecognized field at: loging
Did you mean?:
  - logging
  - assets
  - server
  - metrics
  - httpClient
    [1 more]

at io.dropwizard.configuration.ConfigurationParsingException$Builder.build(ConfigurationParsingException.java:279)
at io.dropwizard.configuration.BaseConfigurationFactory.build(BaseConfigurationFactory.java:140)
at io.dropwizard.configuration.BaseConfigurationFactory.build(BaseConfigurationFactory.java:89)
at io.dropwizard.cli.ConfiguredCommand.parseConfiguration(ConfiguredCommand.java:126)
at io.dropwizard.cli.ConfiguredCommand.run(ConfiguredCommand.java:74)
at io.dropwizard.cli.Cli.run(Cli.java:78)
at io.dropwizard.Application.run(Application.java:93)
at com.gitlab.zloster.ServeStaticApplication.main(ServeStaticApplication.java:21)
Caused by: com.fasterxml.jackson.databind.exc.UnrecognizedPropertyException: Unrecognized field "loging" (class com.gitlab.zloster.ServeStaticApplicationConfiguration),not marked as ignorable (6 known properties: "assets","viewRendererConfiguration","logging","httpClient","server","metrics"])
 at [Source: UNKNOWN; line: -1,column: -1] (through reference chain: com.gitlab.zloster.ServeStaticApplicationConfiguration["loging"])
 at com.fasterxml.jackson.databind.exc.UnrecognizedPropertyException.from(UnrecognizedPropertyException.java:60)
 at com.fasterxml.jackson.databind.DeserializationContext.handleUnknownProperty(DeserializationContext.java:822)     
 at com.fasterxml.jackson.databind.deser.std.StdDeserializer.handleUnknownProperty(StdDeserializer.java:1152)
 at com.fasterxml.jackson.databind.deser.BeanDeserializerBase.handleUnknownProperty(BeanDeserializerBase.java:1589)
 at com.fasterxml.jackson.databind.deser.BeanDeserializerBase.handleUnknownVanilla(BeanDeserializerBase.java:1567)
 at com.fasterxml.jackson.databind.deser.BeanDeserializer.deserialize(BeanDeserializer.java:258)
 at com.fasterxml.jackson.module.afterburner.deser.SuperSonicBeanDeserializer.deserialize(SuperSonicBeanDeserializer.java:155)
 at com.fasterxml.jackson.databind.ObjectMapper._readValue(ObjectMapper.java:3984)
 at com.fasterxml.jackson.databind.ObjectMapper.readValue(ObjectMapper.java:2276)
 at io.dropwizard.configuration.BaseConfigurationFactory.build(BaseConfigurationFactory.java:127)
 ... 6 more

在我看来,该异常已正确记录*。 *这当然取决于“正确记录”的定义。

您可以按照第一个堆栈跟踪中的类(在Caused by:之前)检查它的工作方式。如果您没有看到记录的异常,则意味着您必须检查您的记录配置,以及是否将标准IO流重定向到某个地方。

本文链接:https://www.f2er.com/3148135.html

大家都在问