【问题标题】:How to remotely view activity logs from a Java EE app in Vaadin?如何从 Vaadin 中的 Java EE 应用程序远程查看活动日志?
【发布时间】:2012-09-10 09:53:12
【问题描述】:
我想远程监控我的 Java EE 应用程序(部署在 glassfish 服务器上)的活动。
基本上,我希望我的客户端使用 Vaadin 实现,以显示有关服务器端活动的日志。
用户想知道服务器端发生了什么......这些日志应该只是高级信息性消息
我想这真的取决于所使用的日志框架(如果有的话)。我已经看到了 log4j 的 Chainsaw,但这本身就是一个客户端。
否则,我可以逐行远程读取文件(如tail -f)...但我也不知道该怎么做。
实现这种事情的最佳解决方案是什么?
【问题讨论】:
标签:
jakarta-ee
logging
glassfish
vaadin
【解决方案1】:
一般而言,您可以简单地使用 Vaadin 标签,无限读取日志文件(或者更确切地说,直到停止)并将文件内容附加到标签。下面是 for 的代码:
Thread t = new Thread() {
@Override
public void run() {
BufferedReader reader = null;
try {
reader = new BufferedReader(new FileReader(LOGFILE));
String line;
while (running) {
line = reader.readLine();
if (line == null) {
// wait until there is more lines in the file
Thread.sleep(POLL_MS);
} else {
// append to the log Label
synchronized (MyApplication.this) {
log.setValue(log.getValue() + line + "<br />");
}
}
}
} catch (IOException e) {
// TODO: handle me
e.printStackTrace();
} catch (InterruptedException e) {
// TODO: handle me
e.printStackTrace();
} finally {
running = false;
if (reader != null) {
try {
reader.close();
} catch (IOException ignore) {
}
}
}
}
};
t.start();
为此,您需要一个 "RAW" mode Label 和一个 ProgressIndicator 来轮询服务器:
ProgressIndicator pi = new ProgressIndicator();
pi.setPollingInterval(POLL_MS);
pi.setIndeterminate(true);
layout.addComponent(pi);
免责声明:此代码来自非关键应用程序,例如缺少错误处理和 HTML 转义。
【解决方案2】:
我看到您想在您的应用中执行此功能。我不确定您是否可以利用 Chainsaw 在 Vaadin 中使用的部分,但如果您好奇,可以查看 VFSLogFilePatternReceiver。
无论如何,如果你想试试电锯信息,看看它是否适合你:
Chainsaw 可以从 Commons VFS 支持的一个文件系统(http、ssh、ftp、smb)读取日志文件、事件远程文件。
如果您愿意,请尝试最新的开发者快照 - 配置屏幕有望让您清楚地了解如何跟踪日志文件,并且具有当前发布版本中不可用的大量功能。
此处提供快照:
http://people.apache.org/~sdeboy