ホームページ >Java >&#&チュートリアル >Java と WebSocket: リアルタイム ログ監視を実装する方法

Java と WebSocket: リアルタイム ログ監視を実装する方法

WBOY
WBOYオリジナル
2023-12-17 21:10:021067ブラウズ

Java と WebSocket: リアルタイム ログ監視を実装する方法

インターネット時代の到来により、リアルタイム通信は最新のソフトウェア開発に不可欠な部分になりました。 WebSocket は、フロントエンドとバックエンドがリアルタイムで通信できるようにする全二重通信プロトコルであり、リアルタイム ログ監視という重要な機能の実装が大幅に容易になります。この記事では、Java と WebSocket がリアルタイム ログ監視を実装する方法を紹介し、理解を深めるのに役立つ実用的なコード例を示します。

ステップ 1: WebSocket 環境を構築する

まず、Java WebSocket や log4j2 などの関連する依存関係を導入する必要があります。次のように、Maven を通じてこれらの依存関係を管理できます。

<dependency>
    <groupId>javax.websocket</groupId>
    <artifactId>javax.websocket-api</artifactId>
    <version>1.1</version>
</dependency>

<dependency>
    <groupId>org.apache.logging.log4j</groupId>
    <artifactId>log4j-core</artifactId>
    <version>2.11.2</version>
</dependency>

<dependency>
    <groupId>org.apache.logging.log4j</groupId>
    <artifactId>log4j-api</artifactId>
    <version>2.11.2</version>
</dependency>

<dependency>
    <groupId>org.apache.logging.log4j</groupId>
    <artifactId>log4j-web</artifactId>
    <version>2.11.2</version>
</dependency>

次に、次のように WebSocket サーバー側のコードを作成します。

@ServerEndpoint("/log")
public class WebSocketServer {
    private static final Logger logger = LogManager.getLogger(WebSocketServer.class.getName());

    @OnOpen
    public void onOpen(Session session) {
        logger.info("WebSocket opened: " + session.getId());
    }

    @OnClose
    public void onClose(Session session) {
        logger.info("WebSocket closed: " + session.getId());
    }

    @OnError
    public void onError(Session session, Throwable throwable) {
        logger.error("WebSocket error: " + throwable.getMessage());
    }

    @OnMessage
    public void onMessage(String message) {
        logger.info("WebSocket received message: " + message);
    }

    public void sendMessage(String message) {
        try {
            for (Session session : this.sessions) {
                if (session.isOpen()) {
                    session.getBasicRemote().sendText(message);
                }
            }
        } catch (Exception e) {
            logger.error("WebSocket send message error: " + e.getMessage());
        }
    }
}

上記のコードでは、注釈 @ServerEndpoint を使用して、クライアントからの接続リクエストを受信できる WebSocket サーバーを定義します。接続が正常に確立されると、@OnOpen メソッドが呼び出されます。接続が閉じられると、@OnClose メソッドが呼び出されます。エラーが発生すると、@OnError メソッドが呼び出されます。サーバーはクライアントから送信された情報を受信すると、@OnMessage メソッドを呼び出して処理します。さらに、クライアントに情報を送信するための sendMessage メソッドも実装しました。

ステップ 2: ログ監視の実装

次に、特定のログ監視機能を実装する必要があります。ここでは、log4j2 を例として、指定されたログ ファイルを監視します。まず、log4j2 構成ファイルに Appender を追加して、指定したファイルにログを出力する必要があります。

<?xml version="1.0" encoding="UTF-8"?>
<Configuration status="INFO">
    <Appenders>
        <RollingFile
            name="RollingFile"
            fileName="logs/app.log"
            filePattern="${sys:logPath}/app-%d{MM-dd-yyyy}-%i.log.gz"
            ignoreExceptions="false">
            <PatternLayout>
                <pattern>%d %p %c{1.} [%t] %m%n</pattern>
            </PatternLayout>
            <Policies>
                <SizeBasedTriggeringPolicy size="64 MB" />
            </Policies>
            <DefaultRolloverStrategy max="10" />
        </RollingFile>
    </Appenders>
    <Loggers>
        <Logger name="com.your.package" level="debug" additivity="false">
            <AppenderRef ref="RollingFile" />
        </Logger>
        <Root level="info">
            <AppenderRef ref="RollingFile" />
        </Root>
    </Loggers>
</Configuration>

Appender では、fileName を logs/app.log に設定します。これは、ログが指定されたファイルに出力されることを意味します。次に、log4j2 に FileTailer インターフェイスを実装し、ログ ファイルの変更を監視するクラスを作成する必要があります。

public class FileTailerListener implements FileTailer {
    private static final Logger logger = LogManager.getLogger(FileTailerListener.class.getName());
    private WebSocketServer webSocketServer;

    public FileTailerListener(WebSocketServer webSocketServer) {
        this.webSocketServer = webSocketServer;
    }

    @Override
    public void handle(String line) {
        logger.info(line);
        this.webSocketServer.sendMessage(line);
    }
}

上記のコードでは、FileTailer インターフェイスを実装し、ログ ファイルを監視するハンドル メソッドを定義しました。同時に、WebSocketServer の sendMessage メソッドを呼び出して、ログ情報をクライアントに送信します。

ステップ 3: WebSocket サーバーとログ モニターの起動

WebSocket サーバーとログ モニターの作成が完了したら、アプリケーションでそれらを起動する必要があります。次のように、起動時に WebSocket サーバーと FileTailerListener をそれぞれ開始できます:

public class Application {
    public static void main(String[] args) {
        try {
            WebSocketServer webSocketServer = new WebSocketServer();
            FileTailerListener fileTailerListener = new FileTailerListener(webSocketServer);

            FileTailerService fileTailerService = new FileTailerService();
            fileTailerService.addListener(fileTailerListener);
            fileTailerService.start(new File("logs/app.log"));

            ServerEndpointConfig.Builder.create(WebSocketServer.class, "/log")
                .configurator(new ServerEndpointConfig.Configurator())
                .build();

            Server server = new Server(8080);
            server.setHandler(new WebSocketHandler(webSocketServer));
            server.start();
            server.join();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

上記のコードでは、FileTailerService を開始してログ ファイルの変更を監視し、FileTailerListener をサービスに登録します。同時に、WebSocket 接続リクエストを処理するために Jetty サーバーが開始されます。

ステップ 4: フロントエンド コードを作成する

前のコードを振り返ると、WebSocket 環境をセットアップし、ログの監視と送信を実装しました。最後に、ログ情報をリアルタイムで表示および更新するためのフロントエンド コードを作成する必要があります。ここでは、JavaScript を使用してフロントエンド開発を完了できます。具体的なコードは次のとおりです:

var webSocket = new WebSocket("ws://localhost:8080/log");

webSocket.onopen = function(event) {
    console.log("WebSocket opened");
};

webSocket.onmessage = function(event) {
    var message = event.data;
    var logContainer = document.getElementById("logContainer");
    var textNode = document.createTextNode(message);
    logContainer.appendChild(textNode);
    logContainer.scrollTop = logContainer.scrollHeight;
};

webSocket.onclose = function(event) {
    console.log("WebSocket closed");
};

webSocket.onerror = function(event) {
    console.error("WebSocket error: " + event);
};

コードでは、WebSocket オブジェクトを使用して接続を確立し、サーバーから送信されたメッセージを受信します。 、メッセージをページに動的に追加します。同時に、scrollTop 属性を使用してログ情報をスクロールし続けます。

この時点で、Java と WebSocket を使用したリアルタイム ログ監視の実装プロセスが完了しました。上記のコード例を通じて、Java と WebSocket を使用してリアルタイム ログ監視を実装する方法を学習し、ログ ファイルを監視して WebSocket を使用する方法も学習できます。

以上がJava と WebSocket: リアルタイム ログ監視を実装する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。