0

Java EE アプリケーション (glassfish サーバーにデプロイされている) のアクティビティをリモートで監視したいと考えています。基本的に、Vaadin を使用してクライアント側を実装し、サーバー側のアクティビティに関するログを表示したいと考えています。

ユーザーは、サーバー側で何が起こっているかを知りたがっています...これらのログは、高レベルの情報メッセージのみである必要があります

私はそれが本当に使用されているロギングフレームワークに依存していると思います。log4j の Chainsaw を見たことがありますが、これはそれ自体がクライアントです。そうでなければ、ファイルを1行ずつリモートで読み取ることができます(のようにtail -f)...しかし、その方法もわかりません。

この種のことを達成するための最良の解決策は何ですか?

4

2 に答える 2

2

一般に、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 エスケープが欠落しています。

于 2012-09-10T10:26:49.347 に答える
1

アプリでこの機能を実行したいと考えています。Chainsaw が Vaadin で使用する部分を活用できるかどうかはわかりませんが、興味がある場合は VFSLogFilePatternReceiver を参照してください。

とにかく、試してみたい場合はチェーンソーの情報を参照してください。

Chainsaw は、Commons VFS (http、ssh、ftp、smb) でサポートされている 1 つのファイル システムから利用可能なログ ファイル、イベント リモート ファイルを読み取ることができます。

必要に応じて、最新の開発者スナップショットを試してみてください。構成画面で、ログ ファイルを追跡する方法が明確になり、現在リリースされているバージョンでは利用できない多くの機能が含まれていることを願っています。

ここで利用可能なスナップショット: http://people.apache.org/~sdeboy

于 2012-09-10T16:57:18.013 に答える