log4j推送日志到远程服务端,服务端再使用websocket推送到前端

1、pom依赖

<dependency>
	<groupId>log4j</groupId>
	<artifactId>log4j</artifactId>
	<version>1.2.17</version>
</dependency>

2、服务端配置log4j-server.properties

#Define a narrow log category. A category like debug will produce some extra logs also from server itself
log4j.rootLogger=ERROR, file
 
#Define how the socket server should store the log events
log4j.appender.file=org.apache.log4j.RollingFileAppender
log4j.appender.file.File=application-error.log
log4j.appender.file.MaxFileSize=1MB
log4j.appender.file.MaxBackupIndex=1
log4j.appender.file.layout=org.apache.log4j.PatternLayout
log4j.appender.file.layout.ConversionPattern=[%d] [%t] [%m]%n

3、服务端监听

socket方式
		ServerSocket socket = new ServerSocket(5000);

		while (true){
			logger.info("dfsdfsfsf");
			Socket client = socket.accept();
			Thread t = new Thread(new LogRunner(client));
			t.start();
		}

4、服务端开启线程

package com.yy.domain;

/**
 * Created by yanyong on 2020/6/3.
 */

import org.apache.log4j.Logger;
import org.apache.log4j.spi.LoggingEvent;

import java.io.ObjectInputStream;
import java.net.Socket;
import java.util.LinkedList;
import java.util.Queue;

public class LogRunner implements Runnable{
    private static final Logger logger = Logger.getLogger(LogRunner.class);

    private ObjectInputStream ois;
    public static Queue<String> queue = new LinkedList<String>();


    public LogRunner(Socket client) {
        try {
            this.ois = new ObjectInputStream(client.getInputStream());
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
    @Override
    public void run() {
        try {
            while (true) {
                Object obj= ois.readObject();
                System.out.println(obj.toString());
                LoggingEvent event = (LoggingEvent) ois.readObject();
                System.out.println(event.getLoggerName()+":"+event.getMessage());
                queue.offer(event.getMessage().toString());
                System.out.println("queue" + queue);
                System.out.println("queuesize" + queue.size());
            }
        }catch (Exception e) {
            e.printStackTrace();
        } finally {
        }
    }
}

5、客户端配置log4j-peoperties

#Define the log4j configuration for local application
log4j.rootLogger=ERROR, server
 
#We will use socket appender
log4j.appender.server=org.apache.log4j.net.SocketAppender
 
#Port where socket server will be listening for the log events
log4j.appender.server.Port=5000
 
#Host name or IP address of socket server
log4j.appender.server.RemoteHost=localhost
 
#Define any connection delay before attempting to reconnect
log4j.appender.server.ReconnectionDelay=10000

6、客户端输出日志

private static final Logger logger = LoggerFactory.getLogger(xx.class);
logger.error("test");

7、客户端使用websocket推送前端
websocket推送日志到前端
8、log4j推送到本地系统,再推送到前端
log4j推送到本地系统,再推送到前端
9、github源码
源码下载

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
下面是一个使用 Spring WebFlux 实现 WebSocket 服务 FLV 视频数据的示例代码: ```java @Configuration @EnableWebFlux public class WebSocketConfig { @Bean public HandlerMapping handlerMapping() { Map<String, WebSocketHandler> map = new HashMap<>(); map.put("/video", new VideoWebSocketHandler()); SimpleUrlHandlerMapping mapping = new SimpleUrlHandlerMapping(); mapping.setUrlMap(map); mapping.setOrder(1); return mapping; } @Bean public WebSocketHandlerAdapter handlerAdapter() { return new WebSocketHandlerAdapter(); } } public class VideoWebSocketHandler implements WebSocketHandler { private Flux<DataBuffer> videoData; public VideoWebSocketHandler() { // 从文件或网络中读取 FLV 视频数据 // 这里假设已经将数据读取为一个 Flux<DataBuffer> 对象 this.videoData = readVideoData(); } @Override public Mono<Void> handle(WebSocketSession session) { return session.send(videoData.map(session::binaryMessage)) .and(session.receive().map(WebSocketMessage::getPayloadAsText).log()); } private Flux<DataBuffer> readVideoData() { // 这里使用一个简单的随机数据生成器模拟视频数据 // 实际应用中需要从文件或网络读取真实的 FLV 视频数据 return Flux.generate(() -> new byte[1024], (bytes, sink) -> { new Random().nextBytes(bytes); sink.next(DefaultDataBufferFactory.sharedInstance.wrap(bytes)); return bytes; }); } } ``` 在上面的代码中,我们定义了一个 `VideoWebSocketHandler` 类,它实现了 `WebSocketHandler` 接口,用于处理 WebSocket 连接。在 `VideoWebSocketHandler` 类的构造方法中,我们读取了 FLV 视频数据并将其转换为一个 `Flux<DataBuffer>` 对象。在 `handle` 方法中,我们使用 `session.send` 方法将视频数据发给客户,并使用 `session.receive` 方法接收客户的消息。这里我们假设客户不会发任何消息,因此我们只是简单地将接收到的消息记录到日志中。 在 `WebSocketConfig` 类中,我们定义了一个 `HandlerMapping` Bean,用于将 `/video` 路径映射到 `VideoWebSocketHandler` 处理器。我们还定义了一个 `WebSocketHandlerAdapter` Bean,用于将 `WebSocketHandler` 对象适配成 Spring WebFlux 的 `HandlerAdapter` 接口。 使用上面的代码,我们可以在 Spring WebFlux 中实现一个 WebSocket 服务,用于 FLV 视频数据给前端播放。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值