SpringBoo+Vue构建简洁日志文件查看系统

news2024/11/14 14:00:57

点击下载《SpringBoo+Vue构建日志文件查看系统(源代码)》

1. 前言

想必经常做java开发的小伙伴,其大多数服务都是运行在linux系统上的,当遇到一些比较棘手的bug需要处理时,经常要上服务器去捞日志,然后通过各种查询啥的去寻找有用的信息,这样不仅对服务器有一定的安全隐患,而且查询日志内容也很不方便直观,虽然市面上有一些优秀的日志管理系统,但安装和部署也要耗费不少时间,于是,我就想到,能否有一个简单又好用,还不用花大力气去安装部署,界面简单友好又方便好用的日志查看系统呢?于是本系统就应运而生了。

这款日志文件读取Web系统展现了卓越的功能性和用户体验。它不仅支持多种文件格式(如.log和.gz),还提供了灵活的搜索选项,允许用户按行号、行数或内容来筛选日志条目。此外,系统的自动更新功能实时追踪日志文件的变化,确保用户能够即时获取最新的信息。简洁直观的操作界面使得这款工具易于使用,即使是技术新手也能快速上手。总之,该系统为日志文件管理和分析提供了高效、便捷的解决方案。

本系统总共包含两部分内容,一部分为采用springboot编写的java后台程序,用于读取其他springboot程序产生的日志内容,另一部分为使用Vue编写的Web程序,通过调用java后台程序提供的接口,获取相应的日志内容。

2. Web系统

2.1 登录

本系统由于只是本人用于查看日常工作中所开发的springboot软件产生的日志,所以在业务流程上尽量采用简单高效的实现方法,因此本系统并未使用到任何数据库,在登录验证方面,由springboot程序在配置文件中写死了登录名和密码,yml配置详情如下:
在这里插入图片描述

Web登录页面也是采用了简单的实现,详情如下:

在这里插入图片描述

2.2 日志查看

日志查看,分两种情况,一种是按起始行号和读取行数查看,另一种是输入查询内容及返回的记录数来查看,两种方式分别采用不同的数据输入格式,使用时需要注意,不过,提示内容将输入格式已经写得很明白了,一看就明白。
在这里插入图片描述

主界面主要分为5个部分:

1、这里是服务名,本系统可以同时读取多个SpringBoot程序的日志,根据服务名进行划分。

2、这是日志目录,其包括了日志目录已经日志文件。

3、这是日志内容展示区域。

4、这是查询内容输入区域,需根据不同的查看方式输入不同格式的内容进行查看日志。

5、这是日志查看方式选择,可选择方式包括:按行查看日志、按内容搜索日志。

2.3 按行查看日志

下面演示按行查看日志内容,输入的查询条件是:100:3,表示从100行开始,读取3行,效果如下图:

在这里插入图片描述

在不输入任何查询条件的情况下,一次返回100行数据,当滚动条滚动到最底下的时候将会自动再拉取一次数据。

2.4 按搜索内容查看日志

下面演示按搜索内容查看日志,输入的查询条件是:

"{"instant":{"epochSecond":1695120508,"nanoOfSecond":620000000}" 10

表示查询的内容为**{“instant”:{“epochSecond”:1695120508,“nanoOfSecond”:620000000}**,返回前10条记录。

注意:如果查询的内容中有空格,需要使用英文的双引号括起来。

在这里插入图片描述

2.5 自动读取文件内容

对于后缀为.log的文件,表示此文件SpringBoot程序可能会实时地更新,因此可以开启自动读取文件,此后,每隔2秒将自动调用后台接口读取文件更新内容。

3. SpringBoot后台

3.1 配置文件

以下为配置文件application.yml的内容

server:
  port: 19123

spring:
  application:
    name: readSystemLogFile
  config:
    activate:
      on-profile: dev
  mvc:
    pathmatch:
      matching-strategy: ant_path_matcher

logging:
  config: classpath:log4j2.xml
  level:
    root: INFO
    javax.activation: INFO
    org.apache.catalina: INFO
    org.apache.commons.beanutils.converters: INFO
    org.apache.coyote.http11.Http11Processor: INFO
    org.apache.http: INFO
    org.apache.tomcat: INFO
    org.springframework: INFO
    com.yyqq: debug

# 程序基本配置
services:
  # 说明:name和directory必须一一对应
  nameList:
    - "test"
  directoryList:
    - "D:\\test-service-logs\\"
  #用户名和密码,格式为:用户名@密码;用户名@密码
  systemUser: "admin@admin;test@test"

3.2 Controller

本着简单实用的原则,本系统的Controller一共有两个,分别是用于账号管理的userController以及用于日志操作方面的SystemLogController。

package com.yyqq.controller;

import com.yyqq.common.result.CommonResult;
import com.yyqq.model.dto.UserLoginDTO;
import com.yyqq.service.UserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;

@RestController
@RequestMapping("/user")
public class UserController {

    @Autowired
    private UserService userService;

    @PostMapping("/login")
    public CommonResult login(@Validated @RequestBody UserLoginDTO userLoginDTO) {
        return userService.login(userLoginDTO);
    }
}

package com.yyqq.controller;

import com.yyqq.common.result.CommonResult;
import com.yyqq.model.dto.QueryFileContentDTO;
import com.yyqq.model.dto.ReadFileLineDTO;
import com.yyqq.service.SystemLogService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

@RestController
@RequestMapping("/systemLog")
public class SystemLogController {

    @Autowired
    private SystemLogService systemLogService;

    /**
     * 获取服务名列表
     * @return
     */
    @GetMapping("serviceNameList")
    public CommonResult<Object> getServiceNameList() {
        return systemLogService.getServiceNameList();
    }

    /**
     * 读取服务器日志目录下的文件列表
     * @param serviceName
     * @return
     */
    @GetMapping("{serviceName}/fileList")
    public CommonResult<Object> getFileList(@PathVariable("serviceName") String serviceName) {
        return systemLogService.getFileList(serviceName);
    }

    /**
     * 按行读取文件内容
     * @param readFileLineDTO
     * @return
     */
    @PostMapping("readFileContent")
    public CommonResult<Object> readFileContent(@RequestBody ReadFileLineDTO readFileLineDTO) {
        return systemLogService.readFileContent(readFileLineDTO);
    }

    /**
     * 按行读取文件内容
     * @param queryFileContentDTO
     * @return
     */
    @PostMapping("queryFileContent")
    public CommonResult<Object> queryFileContent(@RequestBody QueryFileContentDTO queryFileContentDTO) {
        return systemLogService.queryFileContent(queryFileContentDTO);
    }
}

4. 总结

在这个数字化时代,数据管理和信息检索变得至关重要。这款日志文件读取Web系统,不仅满足了基础的数据读取需求,更在许多功能上有着出色的表现。

首先,系统能够读取多种格式的文件,包括.log和.gz,这大大提高了其适应性和实用性。无论是日常的日志文件还是经过压缩的大型文件,用户都可以轻易地通过该系统进行读取和解析。

更值得一提的是,本系统添加了多种搜索和筛选功能。用户可以根据行号、行数,甚至是输入的内容来查找特定的日志条目。这种灵活的搜索方式使得在大量数据中快速找到所需信息变得简单而高效。

此外,自动读取并更新.log文件的更新内容的功能,使得这款系统不仅仅是一个静态的数据查看工具,而是一个动态的信息监测平台。这对于需要实时监控系统运行状况或响应潜在问题的用户来说,是一个极为有用的功能。

最后,从用户体验的角度来看,该系统的操作简单、界面友好。即使是不熟悉技术的人,也可以快速上手并充分利用这个系统。这无疑增加了系统的普及率和实用性。

条目。这种灵活的搜索方式使得在大量数据中快速找到所需信息变得简单而高效。

此外,自动读取并更新.log文件的更新内容的功能,使得这款系统不仅仅是一个静态的数据查看工具,而是一个动态的信息监测平台。这对于需要实时监控系统运行状况或响应潜在问题的用户来说,是一个极为有用的功能。

最后,从用户体验的角度来看,该系统的操作简单、界面友好。即使是不熟悉技术的人,也可以快速上手并充分利用这个系统。这无疑增加了系统的普及率和实用性。

总的来说,这个日志文件读取系统,凭借其出色的功能和简便的操作,将复杂的数据管理任务变得简单而直观,对于需要处理和分析日志文件的人群来说,是一个不可或缺的工具。

点击下载《SpringBoo+Vue构建日志文件查看系统(源代码)》

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1437466.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

网络空间内生安全数学基础(2)——编码信道数学模型

目录 &#xff08;零&#xff09;这篇博客在干什么&#xff08;一&#xff09;内生安全与香农信道编码定理&#xff08;二&#xff09;基本定义&#xff08;三&#xff09;编码信道存在定理&#xff08;三.壹&#xff09;编码信道存在第一定理&#xff08;三.贰&#xff09;编码…

Python程序员面试题精选(1)

本文精心挑选了10道Python程序员面试题&#xff0c;覆盖了Python的多个核心领域&#xff0c;包括装饰器、lambda函数、列表推导式、生成器、全局解释器锁(GIL)、单例模式以及上下文管理器等。每道题都附有简洁的代码示例&#xff0c;帮助读者更好地理解和应用相关知识点。 题目…

数据结构与算法之美学习笔记:50 | 索引:如何在海量数据中快速查找某个数据?

目录 前言为什么需要索引&#xff1f;索引的需求定义构建索引常用的数据结构有哪些&#xff1f;总结引申 前言 本节课程思维导图&#xff1a; 在第 48 节中&#xff0c;我们讲了 MySQL 数据库索引的实现原理。MySQL 底层依赖的是 B 树这种数据结构。留言里有同学问我&#xff…

《山雨欲来-知道创宇 2023 年度 APT 威胁分析总结报告》

下载链接: https://pan.baidu.com/s/1eaIOyTk12d9mcuqDGzMYYQ?pwdzdcy 提取码: zdcy

VSCode无法启动:Waiting for server log...

问题基本情况 [13:30:20.720] > code 1.86.0 (commit 05047486b6df5eb8d44b2ecd70ea3bdf775fd937) [13:30:20.724] > Running ssh connection command... /var/fpwork/reiss/vscdata/server/cplane/.vscode-server/code-05047486b6df5eb8d44b2ecd70ea3bdf775fd937 comman…

C++中的析构函数

一、析构函数概念 析构函数不是完成对象的销毁&#xff0c;对象的销毁是由编译器完成的。析构函数完成的是对象中资源的清理工作。通常是对对象中动态开辟的空间进行清理。 二、析构函数特性 1.析构函数的函数名是 ~类名 2.析构函数无参数无返回值 3.一个类中只能有一个析…

有趣的CSS - 旋转的太极图

目录 整体效果核心代码html 代码css 部分代码 完整代码如下html 页面css 样式页面渲染效果 整体效果 使用 :before 、:after 伪元素以及 animation 属性画一个顺时针旋转的太极图。 核心代码部分&#xff0c;简要说明了写法思路&#xff1b;完整代码在最后&#xff0c;可直接复…

python 函数式编程入门:Lambda 函数的魅力

python 函数式编程入门&#xff1a;Lambda 函数的魅力 介绍Lambda 函数的应用排序过滤映射map、filter、reduce数据转换和筛选 介绍 Lambda 函数是 Python 中一个强大的功能&#xff0c;它可以快速创建匿名函数。在函数式编程中&#xff0c;lambda 函数发挥着至关重要的作用。…

消息队列使用的四种场景介绍

一、简介 消息队列中间件是分布式系统中重要的组件&#xff0c;主要解决应用耦合&#xff0c;异步消息&#xff0c;流量削锋等问题。 实现高性能&#xff0c;高可用&#xff0c;可伸缩和最终一致性架构。 使用较多的消息队列有ActiveMQ&#xff0c;RabbitMQ&#xff0c;ZeroMQ…

java内部类概述及使用方法

前言&#xff1a; 打好基础&#xff0c;daydayup! 内部类 内部类概述&#xff1a; 内部类是类的五大成分之一&#xff08;成员变量&#xff0c;方法&#xff0c;构造器&#xff0c;内部类&#xff0c;代码块&#xff09;&#xff0c;如果一个类定义在另一个类的内部&#xff…

『运维备忘录』之 Yum 命令详解

运维人员不仅要熟悉操作系统、服务器、网络等只是&#xff0c;甚至对于开发相关的也要有所了解。很多运维工作者可能一时半会记不住那么多命令、代码、方法、原理或者用法等等。这里我将结合自身工作&#xff0c;持续给大家更新运维工作所需要接触到的知识点&#xff0c;希望大…

什么是UI设计?

用户界面&#xff08;UI&#xff09;它是人与机器互动的载体&#xff0c;也是用户体验&#xff08;UX&#xff09;一个组成部分。用户界面由视觉设计 (即传达产品的外观和感觉) 和交互设计 (即元素的功能和逻辑组织) 两部分组成。用户界面设计的目标是创建一个用户界面&#xf…

新版本nginx安装提示需要openssl的问题

新版本的nginx安装的时候未发现openssl的路径&#xff0c;有两种方式解决 方式一&#xff1a; 找到本地nginx的解压目录中 &#xff0c;例如我的放到root下面了。 进入 /root/nginx1.24.0/auto/lib/openssl/conf 目录下修改内容 &#xff0c;这两行都需要修改&#xff0c;…

TCP 粘包/拆包

文章目录 概述粘包拆包发生场景解决TCP粘包和拆包问题的常见方法Netty对粘包和拆包问题的处理小结 概述 TCP的粘包和拆包问题往往出现在基于TCP协议的通讯中&#xff0c;比如RPC框架、Netty等 TCP 粘包/拆包 就是你基于 TCP 发送数据的时候&#xff0c;出现了多个字符串“粘”…

微信小程序(三十七)选项点击高亮效果

注释很详细&#xff0c;直接上代码 上一篇 新增内容&#xff1a; 1.选择性渲染类 2.以数字为需渲染内容&#xff08;数量&#xff09; 源码&#xff1a; index.wxml <view class"Area"><!-- {{activeNumindex?Active:}}是选择性添加类名进行渲染 -->&l…

P1808 单词分类

P1808 单词分类 题目描述 Oliver 为了学好英语决定苦背单词&#xff0c;但很快他发现要直接记住杂乱无章的单词非常困难&#xff0c;他决定对单词进行分类。 两个单词可以分为一类当且仅当组成这两个单词的各个字母的数量均相等。 例如 AABAC&#xff0c;它和 CBAAA 就可以…

Linux(三)--文件系统

Linux命令简介 [rootlocalhost ~]# 表示 Linux 系统的命令提示符。 []&#xff1a;这是提示符的分隔符号&#xff0c;没有特殊含义。 root&#xff1a;显示的是当前的登录用户&#xff0c;笔者现在使用的是 root 用户登录。 &#xff1a;分隔符号&#xff0c;没有特殊含义。 l…

【数据分享】1929-2023年全球站点的逐月平均降水量(Shp\Excel\免费获取)

气象数据是在各项研究中都经常使用的数据&#xff0c;气象指标包括气温、风速、降水、湿度等指标&#xff0c;说到常用的降水数据&#xff0c;最详细的降水数据是具体到气象监测站点的降水数据&#xff01; 有关气象指标的监测站点数据&#xff0c;之前我们分享过1929-2023年全…

多维数组和多维指针

文章目录 No1No2No3No4No5No6 一定要理解跨度 No1 #include <iostream> using namespace std; int main() {int a[]{1,2,3,4,5};//&a1是整个数组的一个跨度&#xff08;无论a是多少维数组&#xff09;int *p (int*)(&a1);cout<< *(a1) <<endl;//2…

《向量数据库指南》——Milvus Cloud 「部署」:简化部署一直在路上

“docker-compose 能部署分布式吗?”"单机部署为什么还依赖这么多组件?"“大家 Milvus Cloud 集群部署有没有实践过比较好的方案?” 作为一个开源数据库,是否能够进行快速部署,是所有工作的前提。在简化部署的道路上,社区从来没有停止过脚步。2023 年,社区推…