【问题标题】: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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-12-15
        • 2022-01-24
        • 2012-07-04
        • 1970-01-01
        • 2017-05-20
        • 1970-01-01
        相关资源
        最近更新 更多