Как мне перехватить ConfigurationParsingException? - PullRequest
1 голос
/ 07 ноября 2019

Как мне поймать 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.getMessage(), e);
    }
  }
}

Ответы [ 2 ]

0 голосов
/ 07 ноября 2019

Добавлено после комментария: Где ловятся исключения?

at io.dropwizard.cli.Cli.run(Cli.java:78) дает нам ответ.

Что можно сделатьдля достижения цели:

Из примечаний к выпуску , которые читаются долго есть это PR №2260 . Похоже, что это имеет дело с заявленной проблемой: регистрация в формате JSON на этапе начальной загрузки до применения конфигурации.

Это может быть полезно или нет в зависимости от того, как журналы dropwizard сконфигурированы и перенесены встек ELK. Если используется локальный файл журнала, то StdErr и StdOut должны быть перенаправлены в этот файл. Тогда LogStash должен быть в состоянии справиться с ними. Если используется какой-либо прямой сетевой транспорт - я не знаю.

Второе редактирование: Существует также команда check . Используется для проверки настроек конфигурации. Таким образом, он может быть интегрирован где-то в набор инструментов развертывания для проверки конфигурации развертывания.

~/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проект здесь . Когда я пытаюсь запустить его с неработающей конфигурацией:

#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:). Если вы не видите зарегистрированное исключение, это означает, что вы должны проверить конфигурацию журналирования и перенаправлены ли стандартные потоки ввода-вывода куда-либо.

0 голосов
/ 07 ноября 2019

Глядя на документацию DropWizard, ни один из методов, которые вы вызываете, не выдает никаких исключений. Рискну сказать, что один из методов, которые вы вызываете, обрабатывает генерируемую ошибку, поэтому она не распространяется вверх на ваши блоки catch. Надеюсь, это поможет.

...