我正在尝试使用codahale指标将指标添加到普通Java应用程序.我想使用@Timed注释,但我不清楚它使用哪个MetricRegistry,或者如何告诉它使用哪个MetricRegistry.该应用程序是一个普通的Java 8应用程序,使用Maven 3构建,没有Spring,没有Hibernate.
我在dropwizard文档中找不到有关如何实现@Timed的任何文档:https://dropwizard.github.io/metrics/3.1.0/manual/
我添加了这些依赖项:
<dependency>
<groupId>io.dropwizard.metrics</groupId>
<artifactId>metrics-core</artifactId>
<version>3.1.0</version>
</dependency>
<dependency>
<groupId>com.codahale.metrics</groupId>
<artifactId>metrics-annotation</artifactId>
<version>3.0.2</version>
</dependency>
Run Code Online (Sandbox Code Playgroud)
当我使用对Timer的编程调用时,我可以获得报告,因为我知道使用了哪些MetricsRegistry:
static final MetricRegistry metrics = new MetricRegistry();
private void update() throws SQLException {
Timer.Context time = metrics.timer("domainobject.update").time();
try {
[...]
} finally {
time.stop();
}
}
Run Code Online (Sandbox Code Playgroud)
但是当我使用更优雅的@Timed注释时,我不知道使用了哪个注册表,因此我无法创建一个记者,这意味着我无法报告指标(我甚至不确定这是否确实任何东西):
@Timed(name = "domainobject.update")
private void update() throws SQLException {
[...]
}
Run Code Online (Sandbox Code Playgroud)
请告知如何使@Timed和其他Metrics注释在常规Java应用程序中工作.
附加信息:我发现这个奇怪的原因是我添加了Lombok框架和@ Slf4j注释确实有效.我在maven pom.xml中添加了Lombok作为依赖项:
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.14.8</version>
</dependency>
Run Code Online (Sandbox Code Playgroud)
我可以使用@ Sl4fj类注释向类中添加一个记录器,而不会使成员变量混乱:
@Slf4j
public class App {
public void logsome(){
log.info("Hello there");
}
} …Run Code Online (Sandbox Code Playgroud)