是否可以在没有log4j的情况下使用perf4j?

问题描述:

我正在写一个库,并希望使用perf4j主要是为了公开JMX性能计数器。
根据这里的说明http://perf4j.codehaus.org/devguide.html perf4j是为了与log4j结合使用,但是由于我正在编写一个库,我无法控制log4j的使用,所以库的用户可能会也可能不希望使用log4j,不想让这成为一项要求。
有没有办法使用perf4j,特别是暴露perf4j JMX计数器编程方式而不需要使用log4j?是否可以在没有log4j的情况下使用perf4j?

+0

所有Codehaus服务已终止。您与Codehaus的链接已损坏。 – naXa 2016-01-06 08:15:00

我会说是的。我跟着你发布的链接,发现第一段说

一些的的Perf4工具需要 额外的依赖(例如, 定制的log4j附加目的地需要 log4j的罐子也可以在你的 类路径)。

这表明在我的类路径中没有log4j是正常的事情。

+0

具体来说,JMX appender看起来像只能使用log4j.xml,所以我想知道是否有没有log4j的例子。我链接的页面没有这个,但也许它在那里... – Ran 2010-02-28 06:03:24

+0

好吧,似乎有几个例子不使用log4j,但他们大多数都使用它。然而,大多数人会毫不犹豫地指定它们存在时的依赖关系(因为您链接的页面经常会这样做),所以我不确定为什么你会犹豫。 – 2010-03-03 04:12:47

+0

perf4j中的功能我想要使用的功能需要log4j.xml(而不是log4j.properties),尽管这是首选方式,但在许多现有应用程序中并不常见,所以我不想过多地满足使我的用户从.properties移到.xml。 我*这样做了一次,它不是农民...... – Ran 2010-03-07 08:01:06

我的答案或多或少。 Perf4J需要在某个地方输出测量结果,这个地方是一个日志框架。 Perf4J被构建为与Log4J兼容框架一起工作,但您可以更改基础日志记录框架。例如,您可以选择使用SFL4J或Commons Logging。

这里是仅依赖的Perf4的罐子样本:

import org.perf4j.LoggingStopWatch; 
import org.perf4j.StopWatch; 

public class Perf4JEx { 
    public static void main (String[] args) { 
     StopWatch stopWatch = new LoggingStopWatch(); 
     // for demo purposes just sleep 
     Thread.sleep(170); 
     stopWatch.stop("timing"); 
    } 
} 

此代码将输出测量到标准输出(默认简约日志框架)。

开始[1310075342634]时间[171]标记[定时]

注意的Perf4使用log4j配置文件,同时还支持JMX。