首页 > 其他分享 >springboot随项目启动,实时监控日志文件并进行操作

springboot随项目启动,实时监控日志文件并进行操作

时间:2023-09-07 16:35:07浏览次数:42  
标签:springboot filePath private public 实时 Path new 日志 LOGGER

  项目中用到了一个开源音视频服务,但是同事的服务有可能导致开源服务崩溃,所以就写了一个实时监控开源服务输出日志的服务,如果日志中有error信息的话就自动重启那个开源服务。

不过后来还是在项目中把这部分屏蔽了。

 

 1 @Component
 2 public class FileWatcherRunner implements ApplicationRunner {
 3 
 4     private final FileWatcherService fileWatcherService;
 5 
 6     private static final SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
 7 
 8     private final Logger LOGGER = LoggerFactory.getLogger(getClass());
 9 
10     @Autowired
11     public FileWatcherRunner(FileWatcherService fileWatcherService) {
12         this.fileWatcherService = fileWatcherService;
13     }
14 
15     @Override
16     public void run(ApplicationArguments args) throws Exception {
17         // 在应用程序启动时启动文件监控服务
18         String filePath = "/opt/yisuo/macaque/srs/std.log"; // 修改为要监控的文件路径
19         LOGGER.info("{} Start the monitoring file service", sdf.format(new Date()));
20         try {
21             fileWatcherService.startFileWatcher(filePath);
22         } catch (IOException | InterruptedException e) {
23             e.printStackTrace();
24         }
25     }
26 }

 

 1 @Service
 2 public class FileWatcherService {
 3 
 4     private final Logger LOGGER = LoggerFactory.getLogger(getClass());
 5 
 6     private static final SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
 7 
 8     @Autowired
 9     private SRSApiController srsApiController;
10 
11     public void startFileWatcher(String filePath) throws IOException, InterruptedException {
12         Path path = Paths.get(filePath);
13         Path dir = path.getParent();
14         WatchService watchService = FileSystems.getDefault().newWatchService();
15         dir.register(watchService, StandardWatchEventKinds.ENTRY_MODIFY);
16 
17         while (true) {
18             WatchKey key = watchService.take();
19             for (WatchEvent<?> event : key.pollEvents()) {
20                 WatchEvent.Kind<?> kind = event.kind();
21                 Path fileName = (Path) event.context();
22                 if (kind == StandardWatchEventKinds.ENTRY_MODIFY && fileName.equals(path.getFileName())) {
23                     // 读取新生成的数据
24                     readNewDataFromFile(path);
25                 }
26             }
27             boolean valid = key.reset();
28             if (!valid) {
29                 LOGGER.error("{} 无法继续监听目录,退出监控。", sdf.format(new Date()));
30                 break;
31             }
32         }
33     }
34 
35     private void readNewDataFromFile(Path filePath) {
36         try {
37             BufferedReader reader = new BufferedReader(new FileReader(filePath.toFile()));
38             String line;
39             while ((line = reader.readLine()) != null) {
40                 // 处理每行数据
41                 if (line.contains("error code")) {
42                     srsApiController.onCallback();
43                     LOGGER.error("{} SRS line contains error,restart service", sdf.format(new Date()));
44                 }
45             }
46             reader.close();
47         } catch (IOException e) {
48             e.printStackTrace();
49         }
50     }
51 }

 

标签:springboot,filePath,private,public,实时,Path,new,日志,LOGGER
From: https://www.cnblogs.com/wufaxiugai884/p/17682151.html

相关文章

  • springboot 服务端接口公网远程调试﹣实现 HTTP 服务监听【端口映射】
    前言前后端分离项目中,在调用接口调试时候,我们可以通过cpolar内网穿透将本地服务端接口模拟公共网络环境远程调用调试,本次教程我们以Java服务端接口为例。1.本地环境搭建1.1环境参数JDK1.8IDEASpringBootMavenTomcat9.0Postman1.2搭建springboot服务项目搭建一个springboot服务的......
  • springboot打包运行失败
    没有包含启动类的class添加mavenpom.xml;`org.springframework.bootspring-boot-maven-plugin${spring-boot.version}com.hidisp.HidispApplication<!--issue:SpringBoot-0.0.1-SNAPSHOT.jar中没有主清单属性 resolve:①注释掉,或者②将skip值改为......
  • springboot项目自动运行脚本
    注意文件格式unix格式(Windowscrlf换行符有不可见字符)#!/bin/sh#服务名(要与配置文件中的server名保持一致)APP_NAME=""#git本地仓库路径GIT_RESPOSITORY=""#配置文件存储位置PROFILE_LOCATION=""#配置文件名PROFILE_NAME=""#日志文件存储位置LOG_LOCATION="......
  • springBoot long类型 长id 到前端丢失精度问题
    在SpringBoot中,如果将Long类型的id传递到前端,可能会遇到精度丢失的问题。这是因为JavaScript无法精确地表示大于Number.MAX_SAFE_INTEGER(即9007199254740991)的整数。为了解决这个问题,你可以采用以下方法之一:方式1:通过注解方式@Data@EqualsAndHashCode(callSuper=false)......
  • SpringBoot学习之配置MyBatis常见异常
    Invalidboundstatement(notfound)出现原因和解决方法: 常见原因:1.mapper.xml中namespace和实际mapper接口所在的位置不一致。2.mapper.xml中的id名称和maapper接口中的方法名称不一致。3.如果上述两点都没有问题,那么大概率是application配置文件有配置错误。 程序和S......
  • 《自己动手建搜索引擎》日志分析类代码解析与修正为兼容lucene3.0.2
    搜索日志是用来分析用户搜索行为和信息需求的重要依据。一般记录如下信息:搜索关键字用户来源IP本次搜索返回结果数量搜索时间其他需要记录的应用相关信息  例如:搜索时间|日志类型|搜索类型|搜索关键字|IP地址|本次搜索返回结果数量, 存放日志文件内容如下:2008-04......
  • 监听日志来排查连接风暴
    一.监听日志:01-MAR-201800:02:09*(CONNECT_DATA=(SERVER=DEDICATED)(SERVICE_NAME=crmdb2)(INSTANCE_NAME=crmdb21)(CID=(PROGRAM=UnifyFileDeal)(HOST=ncrminf2)(USER=intfile)))*(ADDRESS=(PROTOCOL=tcp)(HOST=10.32.205.240)(PORT=60854))*establish*crmdb2*001-M......
  • springboot vue人事管理系统源码
    开发环境及工具:大等于jdk1.8,大于mysql5.5,idea(eclipse),nodejs,vscode(webstorm)技术说明:springbootmybatisvueelementui代码注释齐全,没有多余代码,适合学习(毕设),二次开发,包含论文技术相关文档。功能介绍:员工端:考勤打卡:定位当前位置,打卡需要在打卡范围内才可打卡(后台设置打卡范围)我的......
  • 百度SpringBoot上传下载组件
    ​ 这里只写后端的代码,基本的思想就是,前端将文件分片,然后每次访问上传接口的时候,向后端传入参数:当前为第几块文件,和分片总数下面直接贴代码吧,一些难懂的我大部分都加上注释了:上传文件实体类:看得出来,实体类中已经有很多我们需要的功能了,还有实用的属性。如MD5秒传的信息。 ......
  • Maven 安装与环境变量配置 及 springboot项目创建
    (1)Maven安装:在官网下载:http://maven.apache.org/download.cgi  (2)Maven配置环境变量:解压到一个路径,然后配置环境变量:新建变量名:MAVEN_HOME变量值:D:\apache-maven-3.6.0(这是我的MAVEN路径)编辑变量名:Path在最前面加上:%MAVEN_HOME%\bin新建系统变量--》......