最近另一个项目组找到我,请我帮忙写日志部分,大概因为之前写过一点log4j的扩展吧。写完后,到网上又逛了一下,看是否有更好的解决方案,无意中发现了这个http://java.dzone.com/articles/do-you-know-log4j-sound-appender,感觉挺有意思的。
看文章里讨论得蛮热烈的,不由心动,自己试了一把。之前又建过一个DownloadManager工程,把它改造成Maven工程。
首先加上依赖,目前已经到1.1版本了。
<dependency>
<groupId>log4j</groupId>
<artifactId>apache-log4j-extras</artifactId>
<version>1.1</version>
</dependency>
接下来先给DownloadManager加上日志功能吧。正好研究一下JDownload的日志实现。JDownload里的日志不是用的Log4j,而是Java Util包中的日志类。改造了一下,换成Log4j。好在之前写过Log4J的扩展,轻车熟路,一会就弄好了。关键是加上了这个方法。
private static SoundAppender createSoundAppender(String name, String audioURL, Level level,
Layout layout) {
SoundAppender soundAppender = new SoundAppender();
soundAppender.setName(name);
soundAppender.setAudioURL(audioURL);
soundAppender.setThreshold(level);
soundAppender.setLayout(layout);
soundAppender.activateOptions();
LevelMatchFilter levelMatchFilter = new LevelMatchFilter();
levelMatchFilter.setLevelToMatch("WARN");
soundAppender.addFilter(levelMatchFilter);
return soundAppender;
}
这就差不多了,打个日志试试吧。可是我试来试去,死活出不来声音。一怒之下,把源码Check Out出来读了一遍。
https://svn.apache.org/repos/asf/logging/log4j/companions/extras/trunk
看了一下源码后,发现跟我的预期相差甚远。原本以为它可以把你的日志记录成声音格式,心想会不会用到了什么Text2Speech技术。看了源码后,直呼上当,其实就是一开始定义一个声音文件,触发了事件后就播放一下。
/**
* Play the sound if an event is being processed
*/
protected void append(LoggingEvent event) {
if (clip != null) {
clip.play();
}
}
O(∩_∩)O~,不过应该也是有办法实现Text2Speech的,http://java.sun.com/products/java-media/speech/reference/codesamples/index.html,有时间可以给它扩展下。
试验源代码:http://javaforge.com/svn/RoaringTiger/trunk/DownloadManager Revision 7。