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

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 通过自定义指令回顾v-内置指令(小结)

    Vue 自定义指令可以实现新的 DOM 操作,以及对现有的指令功能扩充和封装。本文旨在回顾 Vue 内置指令以及介绍如何自定义指令。 Vue 内置指令小结 Vue 提供了多种内置指令,这里我们对这些指令进行一个小结。 v-model 可用于给表单元素绑定数据和更新数据。主要使用的表单元素有 input、textarea、select等。 示例: <in…

    Vue 2023年5月27日
    00
  • Angular中的interceptors拦截器

    Angular是一个流行的JavaScript框架,该框架为Web应用程序提供了一个良好的基础。Interceptors 是 Angular 提供的拦截器机制。这个机制允许你拦截 HTTP 请求和响应,做一些访问控制和业务逻辑的处理并将它们传递到下一个拦截器或请求中,提供了一种简单但强大的方式来创建一个可重用的 HTTP 拦截器。 拦截器的基本结构和用法 拦…

    Vue 2023年5月28日
    00
  • 基于Vue实现后台系统权限控制的示例代码

    基于Vue实现后台系统权限控制的示例代码,可分为以下几个步骤: 实现路由拦截 在Vue项目中,可以通过element-ui的router插件实现路由拦截。在路由配置文件中,通过设置meta字段的requireAuth属性来实现对需要授权的页面进行拦截。示例代码如下: import Vue from ‘vue’; import VueRouter from ‘…

    Vue 2023年5月27日
    00
  • vue-week-picker实现支持按周切换的日历

    接下来我会详细讲解如何使用 vue-week-picker 实现支持按周切换的日历的完整攻略。 1. 简介 vue-week-picker 是一个基于 Vue.js 开发的支持按周切换的日历组件。其核心功能是支持用户在周与周之间进行切换,并显示所选周的日期范围。 2. 安装 首先需要在 Vue.js 项目中安装 vue-week-picker 组件,可以通过…

    Vue 2023年5月29日
    00
  • Vue3 构建 Web Components使用详解

    Vue3 构建 Web Components使用详解 Web Components 是一种新的 Web 技术,它可以让 Web 开发者更加灵活地创建自定义标签,实现跨框架、跨库的组件化开发。Vue3 作为当前最流行的前端框架之一,也支持使用 Web Components 扩展其功能。 什么是 Web Components Web Components 是一种…

    Vue 2023年5月28日
    00
  • vue中三种调用接口的方法

    当我们在使用Vue框架开发应用时,经常需要从后端服务器获取数据,这就需要我们调用接口来实现。Vue中提供了三种常见的方式来调用API接口,分别是使用浏览器原生API发起请求、使用axios库、使用VueResource插件。下面我们来详细讲解一下这三种调用接口的方法。 使用浏览器原生API发起请求 使用浏览器原生API发起请求很简单,可以直接使用JavaSc…

    Vue 2023年5月28日
    00
  • vue-resource 获取本地json数据404问题的解决

    Vue-resource 是Vue.js官方提供的一个数据请求插件,可以方便地进行数据的请求和响应。在使用vue-resource时,经常会遇到获取本地json数据时出现404错误的问题,接下来我将详细讲解如何解决该问题。 问题描述 使用vue-resource请求本地json数据时,页面在访问数据时会报404错误,无法正常获取数据。 解决方案 步骤一:使用…

    Vue 2023年5月27日
    00
  • Vue安装与使用

    对于Vue安装与使用的完整攻略,我为您准备了以下详细的步骤和示例说明: 安装Vue 安装npm 在安装Vue之前,我们需要先安装Node.js。Node.js会自带一个npm(Node Package Manager),用于管理Node.js的包和模块。因此,安装Node.js时同时也会安装npm。 安装Vue 在终端中输入以下命令来安装Vue: npm i…

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