我想远程监控我的 Java EE 应用程序(部署在 glassfish 服务器上)的活动。基本上,我希望我的客户端使用 Vaadin 实现以显示有关服务器端活动的日志。
用户想知道服务器端发生了什么......这些日志应该只是高级信息消息
我想这真的取决于使用的日志框架(如果有的话)。我见过 log4j 的 Chainsaw 但这本身就是一个客户端。否则,我可以逐行远程读取文件(如tail -f
)......但我也不知道该怎么做。
实现这种事情的最佳解决方案是什么?
我想远程监控我的 Java EE 应用程序(部署在 glassfish 服务器上)的活动。基本上,我希望我的客户端使用 Vaadin 实现以显示有关服务器端活动的日志。
用户想知道服务器端发生了什么......这些日志应该只是高级信息消息
我想这真的取决于使用的日志框架(如果有的话)。我见过 log4j 的 Chainsaw 但这本身就是一个客户端。否则,我可以逐行远程读取文件(如tail -f
)......但我也不知道该怎么做。
实现这种事情的最佳解决方案是什么?
一般来说,您可以做的只是使用 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”模式标签和一个轮询服务器的ProgressIndicator:
ProgressIndicator pi = new ProgressIndicator();
pi.setPollingInterval(POLL_MS);
pi.setIndeterminate(true);
layout.addComponent(pi);
免责声明:此代码来自非关键应用程序,例如缺少错误处理和 HTML 转义。
我看到您想在您的应用程序中执行此功能。我不确定您是否可以利用 Chainsaw 在 Vaadin 中使用的部分,但如果您好奇,可以查看 VFSLogFilePatternReceiver。
无论如何,如果你想试试电锯信息,看看它是否适合你:
Chainsaw 可以从 Commons VFS 支持的一个文件系统(http、ssh、ftp、smb)读取日志文件、事件远程文件。
如果您愿意,请尝试最新的开发人员快照 - 配置屏幕有望让您清楚地了解如何跟踪日志文件,并且具有当前发布版本中不可用的大量功能。
可在此处获取快照:http: //people.apache.org/~sdeboy