我正在基于Dropwizard v0.9.1构建一个web堆栈。堆栈中的所有日志都通过AppenderFactory接口的自定义实现发送到Loggly:
@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注释自动连接的。尽管如此,token
和tag
字段由出现在我的配置yaml文件中的值填充:
logging:
level: INFO
appenders:
# send logs to loggly
- type: loggly
threshold: INFO
token: "my-secret-loggly-token"
tag: "webservice-ci"
问题是,这些配置值不会出现在应用程序的配置类中,这意味着在构建其他资源或运行状况检查时,我无法重用它们。
理想情况下,我希望手动注册<code>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);
}
}
以便LoggleAppenderFactory和LoggleHealthCheck都可以使用相同的配置值来指示它们如何与外部服务通信。
我怀疑,如果我引入一个依赖注入框架,如Google Guice,并使用它将应用程序配置注入到两个对象中,这可能是可能的,但另一方面,由于logback appender通常是在应用程序生命周期的早期创建的,我不知道Guice是否会在创建AppenderFactory时准备就绪。
有人知道怎么做吗?如果不是,我是否要将令牌放入配置文件两次?在<code>日志记录中执行一次。附录部分,以及LogglyHealthCheck可以访问的其他部分?
事实证明,配置类公开了一个包含日志配置的LoggingFactory。我将这个助手方法添加到我的配置类中,该类从自定义AppenderFactory中提取我关心的字段:
/**
* Extracts the Loggly token from the logging.appenders section of the configuration file.
* If a {@link LogglyAppenderFactory} is not specified as one of the log appenders, this method returns null.
* @return the Loggly token or null if no token is specified
*/
public String getLogglyToken() {
final DefaultLoggingFactory loggingFactory = (DefaultLoggingFactory) getLoggingFactory();
for (final AppenderFactory appenderFactory : loggingFactory.getAppenders()) {
if (appenderFactory instanceof LogglyAppenderFactory) {
final LogglyAppenderFactory logglyAppenderFactory = (LogglyAppenderFactory) appenderFactory;
return logglyAppenderFactory.getToken();
}
}
return null;
}
它不漂亮,但它有效!
我想你在找
configuration.getLoggingFactory();
此API为您提供配置文件中的所有日志配置。
如。
configuration.getLoggingFactory().getLevel();
configuration.getLoggingFactory().getAppenders()
((ConsoleAppenderFactory)configuration.getLoggingFactory().getAppenders().get(0)).getLogFormat();
不是最漂亮的API,但它应该工作
问题内容: 主要问题-可能吗?我没有运气就尝试了.. 主app.js 提供者本身 而且我有这样的错误: 有任何想法吗? 谢谢! 问题答案: 您 不能 将服务注入提供者配置部分。 您 CAN 注入服务成初始化提供者的服务的部分。 细节: Angular框架有两个阶段的初始化过程: 阶段1:配置 在此阶段,将初始化所有提供程序,并执行所有部分。这些部分可能包含配置提供程序对象的代码,因此可以将它们与提
然后我的看起来像 我的问题是为空。知道怎么了吗?另外,我可以绑定我的注入器的实例而不是绑定类吗?这样,我就可以构造将数据作为参数传递的实例。
问题内容: 对我先前的问题采取了后续行动。我正在尝试使用JSR-330标准注释和jersey捆绑的HK2框架注入应用程序配置数据。 理想情况下,我想为注释创建一个自定义,该自定义将在或对象中查找所需的值,该值将从其他地方读取的数据中填充。在我的第一次尝试中,我创建了一个实例,例如 然后我的模样 我的问题是那是空的。知道有什么问题吗?另外,我可以绑定我的Injector实例而不是绑定类吗?这样,我可
编辑: 我的理解可能是错误的,但这是一个不同于以编程方式设置语言环境的问题,因为我已经实现了那里建议的答案,我仍然有一些问题。 在这个问题中,我请求帮助解决这些问题(在设置的语言环境中没有参考的问题)。 原始帖子 我试图在我的应用程序中实现自定义语言环境,并遇到几个问题。 在调用setContentView之前,我在所有活动中使用以下代码: 编辑: 我还测试了它与: 我添加到Android中的所有
问题是,就应用程序生命周期处理和易于使用而言,这种体系结构是否可以被认为是安全的? Update:每次创建新的活动并希望获得数据时,它可以获得ApplicationContext的BehaviorSubject,然后订阅它,Subject将发出最后发出的值;我为什么要这样做?例如。假设你有新闻项目,你获取了新闻提要,你想启动后台任务来获取新闻项目的全部内容,在这种情况下,我可以在你滚动新闻列表时开
我正在努力弄清楚我为React应用程序配置Firebase的尝试出了什么问题。我已经遵循了至少10个不同的教程,但无法让配置变量注册为已识别的。 然后,我有一个firebase/firebase.js文件,如下所示: 我一直试图弄清楚为什么配置变量被记录为未定义。 有没有人知道如何成功配置一个firebase应用程序。我之前关于这个主题的问题建议删除env.development文件中的:和值之间