gpt4 book ai didi

java - Dropwizard 0.9.1 : Use Application Configuration Values in Custom AppenderFactory Implementation

转载 作者:行者123 更新时间:2023-11-29 04:54:25 24 4
gpt4 key购买 nike

我正在构建一个基于 Dropwizard v0.9.1 的网络堆栈。堆栈中的所有日志都发送到 Loggly通过 AppenderFactory 的自定义实现接口(interface):

@JsonTypeName("loggly")
public class LogglyAppenderFactory extends AbstractAppenderFactory {
@JsonProperty
private String token;

@JsonProperty
private final Optional<String> tag = Optional.absent();

@Override
public Appender<ILoggingEvent> build(LoggerContext context, String applicationName, Layout<ILoggingEvent> layout) {
...
}

protected Layout<ILoggingEvent> buildLayout(LoggerContext context) {
...
}
}

此类未在我的应用程序类的环境中注册。相反,它似乎是由 Dropwizard 基于 @JsonTypeName 注释 Autowiring 的。尽管如此,tokentag 字段由出现在我的配置 yaml 文件中的值填充:

logging:
level: INFO
appenders:
# send logs to loggly
- type: loggly
threshold: INFO
token: "my-secret-loggly-token"
tag: "webservice-ci"

问题是,这些配置值没有出现在我的应用程序的 Configuration 中。类,这意味着我无法在构建其他资源或 HealthCheck 时重复使用它们。

理想情况下,我想像这样手动注册 LogglyAppenderFactory:

 public class WebServiceApplication extends Application<WebServiceAppConfiguration> {
@Override
public void run(WebServiceAppConfiguration configuration, Environment environment) throws Exception {
final HttpClient httpClient = new HttpClientBuilder(environment).using(configuration.getHttpClientConfiguration()).build("httpClient");

// to be clear, environment.logAppenders() doesn't exist, and this doesn't work
final LogglyAppenderFactory logglyAppenderFactory = new LogglyAppenderFactoryBuilder(configuration).build();
environment.logAppenders().register(logglyAppenderFactory)

// when we make this HealthCheck, it would be cool to reference the same config values that the AppenderFactory used
final LogglyHealthCheck logglyHealthCheck = new LogglyHealthCheck(httpClient, configuration);
environment.healthChecks().register("Loggly", logglyHealthCheck);
}
}

这样 LogglyAppenderFactory 和 LogglyHealthCheck 都可以使用相同的配置值来指示它们如何与外部服务通信。

我怀疑如果我引入像 Google Guice 这样的依赖注入(inject)框架并使用它将应用程序配置注入(inject)到两个对象中,这可能是可能的,但另一方面,因为 logback appender 通常在应用程序生命周期的早期创建,我不知道在创建 AppenderFactory 时 Guice 是否准备就绪。

有人知道怎么做吗?如果没有,我是否坚持将 token 两次放入我的配置文件?一次进入 logging.appenders 部分,然后再次进入 LogglyHealthCheck 可以访问的其他部分?

最佳答案

我觉得你在找

configuration.getLoggingFactory();

此 API 为您提供配置文件中的所有日志记录配置。

例如。

configuration.getLoggingFactory().getLevel();

configuration.getLoggingFactory().getAppenders()

((ConsoleAppenderFactory)configuration.getLoggingFactory().getAppenders().get(0)).getLogFormat();

不是最漂亮的 API,但它应该可以工作

关于java - Dropwizard 0.9.1 : Use Application Configuration Values in Custom AppenderFactory Implementation,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34299032/

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