Springboot + Websocket + Sockjs + Stomp + Vue + Iview 实现java后端日志显示在前端web页面上...

本文通过Springboot、WebSocket、Sockjs、Stomp和Vue,详细介绍了如何实现在前端页面实时展示Java后端日志。首先在pom.xml引入WebSocket依赖,然后配置WebSocket消息代理,创建日志实体和阻塞队列。接着,利用Logfilter拦截并存入日志队列,同时在Vue中引入sockjs-client和stompjs库进行WebSocket通信。最后展示了实现效果,并邀请读者提出改进意见。
摘要由CSDN通过智能技术生成

话不多说,看代码。

一、pom.xml 引入spring boot websocket依赖

1 <dependency>
2 <groupId>org.springframework.boot</groupId>
3 <artifactId>spring-boot-starter-websocket</artifactId>
4 </dependency>

二、WebSocketConfig 配置WebSocket消息代理端点,即stomp服务端

 1 @Slf4j
 2 @Configuration
 3 @EnableWebSocketMessageBroker // 注解开启STOMP协议来传输基于代理的消息,此时控制器支持使用
 4 @MessageMapping
 5 public class WebSocketConfig extends AbstractWebSocketMessageBrokerConfigurer
 6 {
 7     @Autowired
 8     private SimpMessagingTemplate messagingTemplate;
 9 
10     // 测试
11     // int info = 1;
12     //
13     // @Scheduled(fixedRate = 4000)
14     // public void outputLogger()
15     // {
16     // log.info("测试日志输出" + info++);
17     // }
18 
19     @Override
20     public void registerStompEndpoints(StompEndpointRegistry registry)
21     {
22         // 将clientMessage注册为STOMP的一个端点
23         // 客户端在订阅或发布消息到目的路径前,要连接该端点
24         // setAllowedOrigins允许所有域连接,否则浏览器可能报403错误
25         registry.addEndpoint("/websocket").setAllowedOrigins("*").addInterceptors().withSockJS(); //
26     }
27 
28     
29 
30     /**
31      * 推送日志到/topic/pullLogger
32      */
33     @PostConstruct
34     public void pushLogger()
35     {
36         ExecutorService executorService = Executors.newFixedThreadPool(4);
37         Runnable fileLog = new Runnable()
38         {
39             @Override
40             public void run()
41             {
42                 while (true)
43                 {
44                     try
45                     {
46                         String log = LoggerQueue.getInstance().poll().toString();
47                         if (log != null)
48                         {
49                             if (messagingTemplate != null)
50                                 messagingTemplate.convertAndSend("/topic/pullFileLogger", log);
51                         }
52                     }
53                     catch (Exception e)
54                     {
55                         e.printStackTrace();
56                     }
57                 }
58             }
59         };
60         executorService.submit(fileLog);
61         executorService.submit(fileLog);
62     }
63 }

三、新增日志消息实体

 1 /*
 2  * 日志消息实体类,这里用了lombok插件
 3  * 没有安装该插件的话,就手动添加get、set方法、toString方法
 4  */
 5 @Getter
 6 @Setter
 7 @ToString
 8 @AllArgsConstructor
 9 public class LoggerMessage
10 {
11     private String body;
12     private String timestamp;
13     private String threadName;
14     private String className;
15     private String level;
16     private String exception;
17     private String cause;
18 }

四、创建一个阻塞队列,作为日志系统输出的日志的一个临时载体

 

 1 /*
  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值