`
HogwartsRow
  • 浏览: 59484 次
  • 性别: Icon_minigender_1
  • 来自: 武汉
社区版块
存档分类
最新评论

JAVA解析服务器日志

阅读更多

      最近做项目有个功能是需要统计各服务器使用情况,因此写一个方法并计算Used值(本文仅统计了以“G”结尾的Used的值),服务器日志内容如图所示:

 

      其核心代码就是,解析服务器日志的java类--AnalysisLog.java,代码如下:

 

package com.fz.cloudsync.business.sns;

 

import java.io.BufferedReader;
import java.io.File;
import java.io.FileReader;
import java.text.SimpleDateFormat;
import java.util.ArrayList;


import java.util.Arrays;
import java.util.Date;
import java.util.List;

import com.funambol.util.TimeUtil;
import com.opensymphony.xwork2.util.logging.Logger;
import com.opensymphony.xwork2.util.logging.LoggerFactory;

 

public class AnalysisLog {

 

 private Logger log = LoggerFactory.getLogger(AnalysisLog.class);
 
 public int storageUsed = 0;//定义了一个全局变量,方便其他类直接使用
 
 //解析日志
 public List<String> parserLog(String dir){


  List<String> comList = new ArrayList<String>();


  List<String> fileList = getLogFileByScanFolder(dir);


  if(fileList==null){return null;}
  
  for (int i = 0; i < fileList.size(); i++) {


   String log_file = fileList.get(i);
   boolean isFlag = checkLogTime(log_file);


   if (isFlag) {

    File file = new File(log_file);
    try {
     List<String> logList = new ArrayList<String>();// 存储日志内容


     FileReader fr = new FileReader(file);
     BufferedReader br = new BufferedReader(fr);

     String line = null;
     while ((line = br.readLine()) != null) {
      logList.add(line);
     }

 

     for (int j = 0; j < logList.size(); j++) {


      if (j == 0) {
       logList.remove(0);
      }


      for (int k = 0; k < logList.size(); k++) {
       if (j == k) {
        String log_data = logList.get(k);
        String usedVlaue = appointField(log_data);// Used值
        if (usedVlaue.endsWith("G")) {
         comList.add(usedVlaue);
        }
       }
      }
     }
     br.close();
     fr.close();
    } catch (Exception e) {
     e.printStackTrace();
    }
   }
  }
  
  countUsedValue(comList);// 调用readLogData()并计算Used值
  
  return comList;
 }
 
 //计算Used的使用值
 public void countUsedValue(List<String> comList){
  List<String> usedList = new ArrayList<String>();
  List<String> dataList = comList;//日志内容
  
  for (int i = 0; i < dataList.size(); i++) {
   String usedGV = dataList.get(i);
   if(usedGV.endsWith("G")){
    double usedValue = Double.valueOf(usedGV.substring(0, usedGV.lastIndexOf("G")).toString());
    usedList.add(String.valueOf(usedValue));
   }
  }


  double usedVlaue_sum = 0,usedVlaue=0;
  for (int i = 0; i < usedList.size(); i++) {
   usedVlaue = Double.valueOf(usedList.get(i));
   usedVlaue_sum +=usedVlaue;
  }


  int used = Integer.valueOf(String.valueOf(Math.round(usedVlaue_sum)));
  storageUsed = used;
     log.info("disk has used:" + storageUsed + "G");
 }

 

 // 去除空格,获取Used值
 public String appointField(String field) {
  String used = "";
  String[] str = field.split("\\s{1,}");
  for (int i = 0; i < str.length; i++) {
   if (i == 2) {
    used = str[i];//获取Used
   }
  }
  return used;
 }

 

 // 检查前一天日志文件存在与否(日志文件名中有时间段)
 public boolean checkLogTime(String logFile) {
  SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMdd");
  String yesterday = sdf.format(TimeUtil.getBefore(new Date(), 1));
  String vorgestern  = sdf.format(TimeUtil.getBefore(TimeUtil.getDateOfStart(new Date()), 2));
  
  String[] str = logFile.split("_");
  String logtime = "";// 日志时间戳
  for (int i = 0; i < str.length; i++) {
   if(i==1){
    logtime = str[i];
   }
  }
  if(yesterday.equals(logtime)){
   return true;
  }


  //删除前天或以前的日志文件
  if(vorgestern.compareTo(logtime)>=0){
   deleteLogFile(logFile);//调用deleteLogFile()方法删除日志
  }
  
  return false;
 }
 
 //检查文件夹存在与否
 public boolean checkFolderIsExists(String dir){
  File folder = new File(dir);
  if (folder.getParentFile() == null) {
   log.info("ParentFile is not exists!");
   return false;
  }else{
   if(!folder.getParentFile().exists()){
    folder.getParentFile().mkdir();
    checkFolderIsExists(dir);
    return true;
   }else{
    folder.mkdir();
    return true;
   }
  }
 }
 
 //扫描文件夹获取日志文件
 public List<String> getLogFileByScanFolder(String dir){
  List<String> fileList = new ArrayList<String>();
  boolean isFlag = checkFolderIsExists(dir);
   if(isFlag==true){
    File file = new File(dir);
    if (file.isDirectory()) {// 是不是目录
     String[] files = file.list();// 返回该目录下所有文件及文件夹数组
     if(files.length>0){
      Arrays.sort(files); // 排序
      for (int i = 0; i < files.length; i++) {
       String log_file = files[i];
       if (log_file.endsWith(".log")) {
        String log_path = dir + "/" + log_file;
        fileList.add(log_path);
       }
      }
     }else{
      log.info("Server Log File is not exists!");
      return null;
     }
    }
   }
  return fileList;
 }

 

 //删除日志文件
 public void deleteLogFile(String delpath){
  try {
   File file = new File(delpath);
   if (!file.isDirectory()) {
    file.delete();
   } else if (file.isDirectory()) {
    String[] filelist = file.list();
    for (int i = 0; i < filelist.length; i++) {
     File delfile = new File(delpath + "\\" + filelist[i]);
     if (!delfile.isDirectory()) {
      delfile.delete();
     } else if (delfile.isDirectory()) {
      deleteLogFile(delpath + "\\" + filelist[i]);
     } else {
      file.delete();
     }
    }
   }
  } catch (Exception e) {
   e.printStackTrace();
  }

 }


 public int getStorageUsed() {
  return storageUsed;
 }

 

 public void setStorageUsed(int storageUsed) {
  this.storageUsed = storageUsed;
 }

 

 public static void main(String[] args){
  // String dir = "D:/opt/tools/diskUse";
  // new AnalysisLog().parserLog(dir);
 }

}

 

      结束语:这段代码,我在无聊的时候进行了一次修改,使其各方法更简单明了,便于理解的方式展现给大家,当然也有些不足之处,就留作大家自己修改完善,希望对初学者和大家有所帮助。

  • 大小: 2.3 KB
0
0
分享到:
评论

相关推荐

    深度解析java游戏服务器开发.zip

    这里,我们将深度解析这个主题,探讨在Java环境下构建游戏服务器的关键知识点。 首先,我们需要理解Java语言的优势。Java以其跨平台的特性、丰富的类库以及强大的性能,成为了后端开发的首选语言之一,尤其适合大型...

    深度解析Java游戏服务器开发源代码

    《深度解析Java游戏服务器开发源代码》是一本专注于Java技术在游戏服务器开发领域的专著,旨在帮助读者深入了解和掌握如何利用Java语言构建高效、稳定的游戏服务端系统。书中的源代码提供了丰富的实践示例,涵盖了从...

    使用Java正则表达式分析处理日志

    Java作为广泛使用的编程语言,提供了强大的正则表达式支持,使得我们能够有效地解析和处理日志文件。本篇将围绕“使用Java正则表达式分析处理日志”这一主题,探讨如何利用Java的正则表达式功能来提取、过滤和操作...

    java ipmi,vxipmi 通过java获取服务器信息,温度、风扇、内存等

    4. **处理响应**:当从服务器收到数据后,Java程序需要解析这些响应,通常是以字节流的形式。VxIPMI库会提供帮助类和方法来解析这些数据,将其转换为可读的格式,如摄氏度、转/分钟等。 5. **内存信息获取**:除了...

    java实时日志解析处理

    在Java开发中,实时日志解析处理是一项至关重要的任务,特别是在大规模分布式系统或者高并发环境中。日志是系统运行状态的记录,对于故障排查、性能优化、安全监控等都有着不可替代的作用。本篇将深入探讨Java如何...

    Java应用服务器 Tomcat

    Java应用服务器Tomcat是Java开发领域中不可或缺的一部分,它是一个开源、轻量级的Web应用服务器,主要用于运行基于Java Servlet和JavaServer Pages(JSP)技术的Web应用程序。由Apache软件基金会开发并维护,Tomcat...

    java 读取Ftp指定位置的文件解析并入库

    标题 "java 读取Ftp指定位置的文件解析并入库" 涉及到的是使用Java编程语言通过FTP(File Transfer Protocol)协议从远程服务器上下载文件,然后对下载的文件进行解析,并将解析得到的数据存储到数据库中。...

    java解析xml及4种常用解析比较

    因此,掌握如何使用Java解析XML是非常必要的技能。本文将详细介绍Java中四种常用的XML解析技术:SAX、DOM、StAX以及JAXB,并对它们的特点、适用场景进行对比分析。 ### 1. SAX 解析器 #### 1.1 定义 SAX(Simple ...

    JAVA简单服务器源代码

    在这个服务器源码中,可能有一个或多个Servlet类,负责解析请求、执行数据库操作,并将结果返回给客户端。 安全性方面,考虑到涉及个人信息的传输,服务器可能应用了HTTPS协议来加密通信,确保数据的隐私。HTTPS是...

    java解析json的jar包

    这个压缩包提供的是一些用于Java解析和操作JSON的库,包括json-lib-2.4-jdk15.jar,这是一个常用的JSON库,它为Java提供了方便的JSON解析和生成功能。 json-lib-2.4-jdk15.jar是主要的JSON处理库,它支持多种Java...

    Java代理服务器程序

    总之,这个Java代理服务器程序涵盖了网络编程、HTTP协议解析、并发处理、缓存策略、安全通信和日志记录等多个方面,对深入理解这些Java技术以及网络原理有着极大的学习价值。通过研究这个项目,开发者可以提升自己在...

    Java写http代理服务器

    5. **日志和错误处理**:记录请求和响应的日志可以帮助调试和分析服务器的行为。同时,良好的错误处理机制可以确保在出现问题时优雅地处理,例如使用`try-catch-finally`结构来捕获和处理异常。 6. **代理服务器...

    java解析json格式字符串所需jar包

    标题提到的是“java解析json格式字符串所需jar包”,描述指出我们可以自行下载这些库。在提供的压缩包文件中,包含了以下几个关键的jar包: 1. **commons-collections-3.2.1.jar**:这是Apache Commons Collections...

    Java开源邮件服务器james源码

    Java开源邮件服务器Apache James是基于Java技术构建的一款强大的邮件服务器软件。它的源代码开放,允许开发者深入了解其工作原理,并可根据需求进行定制化开发。Apache James 2.3.2是该项目的某个稳定版本,提供了...

    java http服务器

    4. **请求解析**:服务器需要解析接收到的HTTP请求,提取出请求行(包括方法、URL和协议版本)、请求头和请求体。 5. **响应构造**:根据请求,服务器需要构造HTTP响应,包括状态码、响应头和响应体。响应体通常是...

    java zookeeper kafka 日志处理

    在日志处理系统中,Kafka可以与其他工具如Logstash或Flume集成,进行日志数据的清洗、解析和结构化。之后,这些预处理的日志数据可以被送入MySQL数据库进行持久化存储。MySQL是一种广泛使用的开源关系型数据库管理...

    Java代理服务器的实现

    ### Java代理服务器的实现 #### 概述 Java代理服务器是一种网络中间件,它作为客户端与目标服务器之间的中介,能够帮助转发HTTP请求和响应。在实际应用中,代理服务器不仅能够提升安全性,还能够用于缓存、日志...

    Java HTTP服务器 TJWS源码

    【Java HTTP服务器TJWS源码】是一款基于Java语言实现的轻量级HTTP服务器,它提供了基础的HTTP服务功能,适合学习和理解网络编程以及Java服务器端开发。TJWS,全称为Tiny Java Web Server,因其小巧且易于理解的源码...

    简单的web服务器 使用java搭建

    本文将深入探讨如何使用Java语言搭建一个简单的Web服务器,以及这个过程中的关键知识点。 首先,我们要理解Web服务器的基本概念。Web服务器是一种软件,它接收HTTP(超文本传输协议)请求并返回HTML页面或其他Web...

Global site tag (gtag.js) - Google Analytics