vue实现前端展示后端实时日志带颜色示例详解

yizhihongxing

Vue实现前端展示后端实时日志带颜色示例详解

介绍

本攻略通过Vue.js实现前端实时展示后端日志功能的实现方法,并且可以根据日志级别实时修改展示的颜色,提高可读性。

实现过程

前端代码部分

首先,在template中建立一个<div>用于展示后端传送过来的实时日志,根据控制台输出的日志可以推断,后端传来的数据都以字符串形式存在,并且每个日志信息之前的数字代表了日志级别(例如0代表了debug级别信息,1代表了info级别信息,依次类推),因此我们对每一个输出的日志信息进行解析,将其日志级别和日志信息分开,并且为日志信息添加相应的颜色。

<template>
    <div>
        <div v-for="(log, index) in logs" :key="index" :style="{color: log.color}">
            {{ log.content }}
        </div>
    </div>
</template>

接下来,在script中引入sockjs-clientstompjs两个包,并且在data中创建两个变量,stompClient表示订阅了后端发送过来的日志信息之后返回的订阅对象,logs表示存放已经解析处理的日志信息,初始值为一个空数组,在生命周期函数中,将Vue实例作为this传递给stompClientconnect()方法以实现建立WebSocket连接向后端发送订阅请求的功能。

import SockJS from 'sockjs-client';
import Stomp from 'stompjs';

export default {
    data() {
        return {
            stompClient: null,
            logs: [],
        };
    },
    created() {
        const socket = new SockJS('/ws/log');
        this.stompClient = Stomp.over(socket);
        this.stompClient.connect({}, this.subscribe);
    },
    methods: {
        subscribe() {
            this.stompClient.subscribe('/topic/log', (message) => {
                const msg = JSON.parse(message.body);
                const level = parseInt(msg.level);
                let content = '';
                let color = '';
                switch (level) {
                    case 0:
                        content = `[DEBUG] ${msg.message}`;
                        color = '#333333';
                        break;
                    case 1:
                        content = `[INFO] ${msg.message}`;
                        color = '#eeeeee';
                        break;
                    case 2:
                        content = `[WARNING] ${msg.message}`;
                        color = '#ff8800';
                        break;
                    case 3:
                        content = `[ERROR] ${msg.message}`;
                        color = '#cc0000';
                        break;
                    default:
                        content = `[UNKNOWN] ${msg.message}`;
                        color = '#000000';
                        break;
                }
                this.logs.push({
                    content,
                    color
                });
            });
        },
    },
};

后端代码部分

由于本例只是为了演示如何使用Vue.js实现前端实时展示后端日志的功能,所以在后端使用一个简单的的logback-spring.xml配置文件进行调试,具体内容如下:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE configuration>
<configuration debug="true">
    <appender name="stdout" class="ch.qos.logback.core.ConsoleAppender">
        <encoder>
            <pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{35} - %msg%n</pattern>
        </encoder>
    </appender>
    <root level="INFO">
        <appender-ref ref="stdout" />
    </root>
</configuration>

后端使用Spring Boot搭建开发环境,首先引入spring-boot-starter-websocketspring-boot-starter-log4j2两个包,并且添加对应的依赖到pom.xml中。为了能够将后端的日志信息实时发送给前端展示,后端需要启用WebSocket并且开放对应的端口进行数据传输,在application.yml中进行相关配置:

server:
  port: 8080
  servlet:
    context-path: /api
  websocket:
    path: /ws
    allowed-origins: http://localhost:8081
logging.config: classpath:logback-spring.xml

其中,server.websocket.path表示WebSocket订阅请求的路径,server.websocket.allowed-origins表示允许WebSocket跨域请求的域名,在本例中前端Vue应用跑在localhost:8081下。

@EnableWebSocket
@SpringBootApplication
public class Application implements WebSocketConfigurer {
    @Autowired
    private WSHandler wsHandler;

    public static void main(String[] args) {
        SpringApplication.run(Application.class, args);
    }

    @Override
    public void registerWebSocketHandlers(WebSocketHandlerRegistry registry) {
        registry.addHandler(wsHandler(), "/ws/log").setAllowedOrigins("*");
    }

    @Bean
    public WSHandler wsHandler() {
        return new WSHandler();
    }
}

WSHandler中,将WebSocket会话对象存储在一个共享变量中,当有新的日志信息需要被发送到前端时,遍历所有WebSocket会话并发送消息,实现了实时日志信息的发送到前端:

public class WSHandler extends TextWebSocketHandler {
    private static final List<WebSocketSession> sessions = new CopyOnWriteArrayList<>();

    @Override
    protected void handleTextMessage(WebSocketSession session, TextMessage message) {
        // ...
    }

    @Override
    public void afterConnectionEstablished(WebSocketSession session) {
        sessions.add(session);
    }

    @Override
    public void afterConnectionClosed(WebSocketSession session, CloseStatus status) {
        sessions.remove(session);
    }

    public void sendLogMessage(String message) {
        TextMessage textMessage = new TextMessage(message);
        for (WebSocketSession session : sessions) {
            try {
                session.sendMessage(textMessage);
            } catch (IOException ex) {
                ex.printStackTrace();
            }
        }
    }

    // ...
}

进行相关测试之后,当后端产生日志时,前端就可以在页面上看到对应的日志信息,并且不同级别的日志会在页面上以不同的颜色展示,提高了可读性。

示例说明

示例1

例如,我们在后端产生了一条debug级别的日志,记录起来之后,前端的日志列表就会多出一条内容为[DEBUG] xxx的日志信息,颜色是黑色。

示例2

如果我们产生了一条error级别的日志,记录之后,在前端的日志列表就会多出内容为[ERROR] xxx的一条日志信息,颜色是红色。

总结

本攻略详细介绍了如何使用Vue.js实现前端实时展示后端日志的功能,并且可以根据日志级别实时修改展示的颜色,提高可读性。需要注意的是,在前端中需要使用SockJSStomp来实现WebSocket的相关功能,在后端中需要开发功能进行对日志信息的处理,并且启用WebSocket来开放端口进行数据传输。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:vue实现前端展示后端实时日志带颜色示例详解 - Python技术站

(0)
上一篇 2023年5月27日
下一篇 2023年5月27日

相关文章

  • 详解Vue中的基本语法和常用指令

    详解Vue中的基本语法和常用指令 Vue的基本语法 Vue.js是一个用于构建交互式Web界面的渐进式JavaScript框架。其中,最基本的语法就是Vue实例。创建Vue实例时,需要提供一个JavaScript对象作为参数,这个对象称之为“选项对象”。 选项对象有很多属性,其中最重要的是data属性。data属性中定义了Vue实例中用到的数据。例如下面这个…

    Vue 2023年5月27日
    00
  • Vue TypeScript使用eval函数遇到的问题

    关于“Vue TypeScript使用eval函数遇到的问题”的完整攻略,我会从以下几个方面进行讲解: 问题描述 常规解决方案 TypeScript中使用eval函数的典型场景 遇到的问题及原因 解决方案详解 示例说明 注意事项 接下来,我会逐一进行讲解。 问题描述 在Vue TypeScript项目中,可能会使用到JavaScript自带的eval函数。然…

    Vue 2023年5月28日
    00
  • 一步一步实现Vue的响应式(对象观测)

    实现Vue的响应式(对象观测) 什么是Vue的响应式? Vue的响应式是指当Vue数据模型中的数据发生变化时,页面中涉及这些数据的部分会自动重新渲染并更新。Vue通过数据劫持方式实现响应式,也就是通过监听对象属性的变化来实现自动触发视图更新。 如何实现Vue的响应式? Vue的响应式是基于Object.defineProperty()方法实现。该方法能够监听…

    Vue 2023年5月27日
    00
  • 深入理解Vue 的钩子函数

    Vue 的钩子函数是 Vue 实例在特定时期执行的函数。这些函数提供了扩展 Vue 行为的机会,例如在实例创建前和销毁后执行某个操作,或者在数据更新时执行一些代码。 Vue 的钩子函数分为两种:生命周期钩子函数和自定义钩子函数。 生命周期钩子函数 Vue 实例的生命周期从创建到销毁一共有 8 个时期,每个时期都有对应的生命周期钩子函数。下面逐一介绍并举例说明…

    Vue 2023年5月27日
    00
  • Vue+Element的后台管理框架的整合实践

    下面我会根据题目需求,讲解“Vue+Element的后台管理框架的整合实践”的完整攻略,具体包括以下几个方面: Vue和Element的基本介绍和安装 Vue.js是一套用于构建用户界面的渐进式 JavaScript 框架,利用它可以实现单页面应用、组件化开发和数据驱动视图等功能。Element是一套基于 Vue 2.0 的桌面端组件库,它提供了一系列的 U…

    Vue 2023年5月27日
    00
  • vue如何添加数组页面及时显示

    当我们在 Vue 中使用数组时,我们可能需要通过添加或删除元素来更新页面。Vue 提供了一些内置的方法,来处理这些问题。下面就是一些步骤,可以让你在 Vue 中应用这些方法,以及让你了解 Vue 如何添加数组页面及时显示。 步骤一:定义数组 第一步是定义一个数组,你可以在 data 函数中定义数组,也可以将其定义为组件实例的属性。例如,下面是将数组定义为组件…

    Vue 2023年5月28日
    00
  • vue增删改查的简单操作

    下面我将为您详细讲解“Vue增删改查的简单操作”的完整攻略。 简介 Vue是一款流行的前端框架,在Vue中增删改查是非常常见和重要的功能,本篇攻略将详细讲解Vue中增删改查的简单操作。 前置技能 在学习Vue增删改查之前,您需要具备以下技能:- 熟悉Vue框架- 掌握Vue的基本知识,如组件、数据响应式等- 掌握JavaScript的基本知识,如变量、函数、…

    Vue 2023年5月27日
    00
  • vue轻量级框架无法获取到vue对象解决方法

    下面是“vue轻量级框架无法获取到vue对象解决方法”的完整攻略。 问题描述 在使用轻量级vue框架时,有时会出现无法获取到vue对象的情况,这给我们的开发带来了不便。那么,我们该如何解决这个问题呢? 解决方法 方式一:通过vue.mixin实现 我们可以通过vue.mixin方法,将vue对象注入到全局中;当这个框架引用了该全局对象时,我们就可以轻松的获取…

    Vue 2023年5月28日
    00
合作推广
合作推广
分享本页
返回顶部