生产环境是Linux,日志不好查?自己开发一个下载日志功能页面

有时候甲方爸爸的项目要部署内网,日志不能直接copy,还是linux系统。排查日志很不方便。

自己搞一个日志下载功能,如果是分布式的项目,还能把其他项目的日志也一起copy下来,来看。

public BiStateDTO<Object>  logList(@RequestBody LogParams params) {IPage<LogVO> page = new Page<LogVO>(params.getPageNum(), params.getPageSize());String resourcePath = UploadUtil.getClassResources()+ File.separator+"log";if(StringUtils.isNotEmpty(params.getServer())){// 获取上一级目录的Path对象Path parentDir = Paths.get(UploadUtil.getClassResources()).getParent();resourcePath = parentDir.toAbsolutePath()+ File.separator+params.getServer()+ File.separator+"log";}if(StringUtils.isNotEmpty(params.getSubject()) && params.getServer().equals(LogParams.Server.NETHOSPITAL.getValue())){//互联网项目的admin目录resourcePath = resourcePath  +"/" +params.getSubject();if(StringUtils.isEmpty(params.getLogType())){resourcePath = resourcePath  +"/info";}}if(StringUtils.isNotEmpty(params.getLogType())){resourcePath = resourcePath  +"/" +params.getLogType();}log.info("resourcePath:"+resourcePath);List<LogVO> list = retrieveLogFileNames(resourcePath);if(StringUtils.isNotEmpty(params.getSubject())  && !params.getServer().equals(LogParams.Server.NETHOSPITAL.getValue())){//其他项目日志遍历出带有admin名称的日志list = list.stream().filter(logVO -> logVO.getPath().contains(params.getSubject())).collect(Collectors.toList());}List<LogVO> sortedList = StreamUtils.sortedList(list,LogVO::getLastModify,false);return HandlerUtil.getBiStateDTO(sortedList,sortedList.size());
}

定义一个方法,加载日志列表

下载的时候直接地址请求日志文件路径即可

如果是下载其他同磁盘的目录日志,做个复制文件功能在下载

private Path PathcopyFile(Path resourcePath){Path currentWorkDir = Paths.get(System.getProperty("user.dir"));// 定义目标目录路径Path targetDir = currentWorkDir.resolve("log/temp/");// 如果目标目录不存在,则创建它try {Files.createDirectories(targetDir);} catch (IOException e) {log.error(e.getMessage(),e);return null;}// 定义目标文件路径Path targetPath = targetDir.resolve(resourcePath.getFileName());// 复制文件try {Files.copy(resourcePath, targetPath, StandardCopyOption.REPLACE_EXISTING);System.out.println("文件复制成功!");} catch (IOException e) {e.printStackTrace();System.out.println("文件复制失败:" + e.getMessage());}log.info("复制生成:"+targetPath);return targetPath;
}

当然 如果你要过滤日志文件的内容,比如通过MDC值或者日志某个用户的信息来过滤

public String   getTheadLog(@RequestBody LogParams params) {String sourceFilePath = params.getDownLoadFilePath();String mdcKey=params.getMdcKey();String resourcePath = UploadUtil.getClassResources()+ File.separator+"log";String targetFilePath = resourcePath+"/thread.log"; // 目标文件路径String mdcPrefix = "MDC["+mdcKey+"]"; // MDC前缀Path filePath = Paths.get(targetFilePath);try {// 确保文件的父目录存在//Files.createDirectories(filePath.getParent());// 检查文件是否存在if (!Files.exists(filePath)) {// 文件不存在,则创建它Files.createFile(filePath);} else {Files.deleteIfExists(filePath);Files.createFile(filePath);}} catch (IOException e) {// 处理可能发生的IO异常e.printStackTrace();}if(StringUtils.isNotEmpty(params.getUserName())){//先过滤出用户所有请求的mdc值try {Files.lines(Paths.get(sourceFilePath.toString()), StandardCharsets.UTF_8).filter(line->line.endsWith(FIND_STR+params.getUserName())).forEach(line -> {Matcher mdcMatcher = MDC_PATTERN.matcher(line);if (mdcMatcher.find()) {mdcSet.add(mdcMatcher.group(1));// 提取MDC值}});} catch (IOException e) {log.error(e.getMessage(),e);}try {Files.lines(Paths.get(sourceFilePath.toString()), StandardCharsets.UTF_8).filter(line ->mdcSet.stream().anyMatch(mdc -> line.startsWith(MDC_PREFIX + mdc))).forEach(line -> {try {Files.write(Paths.get(targetFilePath), (line + System.lineSeparator()).getBytes(StandardCharsets.UTF_8),StandardOpenOption.APPEND, StandardOpenOption.CREATE);} catch (IOException e) {e.printStackTrace();}});} catch (IOException e) {e.printStackTrace();}}else{//根据用户所有的mdc值过滤内容try {Files.lines(Paths.get(sourceFilePath.toString()), StandardCharsets.UTF_8).filter(line -> line.startsWith(mdcPrefix)).forEach(line -> {try {Files.write(Paths.get(targetFilePath), (line + System.lineSeparator()).getBytes(StandardCharsets.UTF_8),StandardOpenOption.APPEND, StandardOpenOption.CREATE);} catch (IOException e) {e.printStackTrace();}});} catch (IOException e) {e.printStackTrace();}}log.info("targetFilePath:"+targetFilePath);return "log/thread.log";
}

效果录下

 想做副业的看过来!!!短剧风口,听说过吗?私信带你

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

MAE预训练的VIT

MAE预训练的VIT&#xff0c;参考这篇文章&#xff1a;Segment Anything论文和源码解读 - 知乎

UI 学习 二 可访问性 模式

一 颜色对比 颜色和对比度可以用来帮助用户看到和理解应用程序的内容&#xff0c;与正确的元素交互&#xff0c;并理解操作。 颜色可以帮助传达情绪、语气和关键信息。可以选择主色、辅助色和强调色来支持可用性。元素之间足够的颜色对比可以帮助低视力的用户看到和使用你的应…

移速u盘怎么恢复彻底删除的文件,移速u盘彻底删除的文件如何恢复

移速u盘怎么恢复彻底删除的文件&#xff1f;在日常使用中&#xff0c;我们经常会遇到需要删除U盘中的文件的情况。然而&#xff0c;有时候我们可能会不小心将重要的文件彻底删除&#xff0c;导致数据的丢失。对于移速U盘用户来说&#xff0c;如何恢复彻底删除的文件成为了一个备…

源达财源滚滚:炒股决策助手,助力投资之路

在当今这个信息节奏飞快的金融市场&#xff0c;每位投资者都怀揣着对成功的渴望&#xff0c;渴望找到一款能够助力自己的炒股软件。他们深知&#xff0c;唯有借助先进的工具和技术、服务&#xff0c;才能更好地把握市场脉搏&#xff0c;实现财富梦想。 源达财源滚滚是一款聚合了…

深入挖掘C语言之——联合

目录 联合的定义 联合的特点 联合的应用场景 在C语言中&#xff0c;联合&#xff08;Union&#xff09;是一种特殊的数据结构&#xff0c;它允许在同一内存地址存储不同类型的数据。与结构体&#xff08;Struct&#xff09;不同的是&#xff0c;联合中的所有成员共享同一块内…

无缝集成 MongoDB Relational Migrator,Tapdata 提供关系型到 MongoDB 实时迁移优化方案

在去年的 MongoDB 用户大会纽约站上&#xff0c;MongoDB 正式宣布全面推出新工具 MongoDB Relational Migrator&#xff08;MongoDB RM&#xff09;&#xff0c;用以简化应用程序迁移和转换——即从传统关系型数据模型到现代的文档数据模型&#xff0c;助力组织快速提升运营效率…

深入解析Condition的底层实现原理

一、原理概述 在AQS中&#xff0c;存在两个FIFO队列&#xff1a;同步队列和等待队列。等待队列是由Condition内部实现的&#xff0c;是一个虚拟的FIFO单向队列。 释义&#xff1a; AQS中tali和head主要构成了一个FIFO双向的同步队列&#xff0c;AQS中Condition构成了一个FIFO…

数据结构中的平衡搜索树 --- 红黑树 (如何旋转与变色)

目录 红黑树的概念 红黑树的性质 红黑树节点的定义 红黑树的插入 1. 按照二叉搜索的树规则插入新节点 2. 检测新节点插入后&#xff0c;红黑树的性质是否造到破坏 红黑树的概念 红黑树&#xff0c;是一种二叉搜索树&#xff0c;但在每个结点上增加一个存储位表示结点的颜…

嵌入式学习38-数据库

数据库软件: 关系型数据库: Mysql &#xff08;开源&#xff09; Oracle SqlServer Sqlite &#xff08;小型数据&#xff09; 非关系型数据库&#xff1a;&#xff08;快速查找数据&#xff09; Redis NoSQ…

快速搭建kerberos认证的HDFS环境

1)、搭建hdfs单机服务器搭建 2)、kdc单机kerberos认证 我的服务器:192.168.1.166 1、安装kerberos 1.1 执行命令:yum -y install krb5-libs krb5-server krb5-workstation 1.2 修改host文件:vim /etc/hosts,加入 192.168.1.166 myli 192.168.1.166 kerberos.example.co…

腾讯云轻量应用服务器地域如何选择?

腾讯云轻量应用服务器地域如何选择&#xff1f;地域就近选择&#xff0c;北方选北京地域、南方选广州地域&#xff0c;华东地区选上海地域。广州上海北京地域有什么区别&#xff1f;哪个好&#xff1f;区别就是城市地理位置不同&#xff0c;其他的差不多&#xff0c;不区分好坏…

使用vue动态在列表中添加或者删除某一行

** 使用vue动态在列表中添加或者删除某一行 ** 先看一下展示的效果&#xff1a; 好了上代码&#xff1a; 样式界面&#xff1a; <template><div class"container"><h4 style"margin-left: 20px;">线路停靠站站点</h4><el-b…