日志处理(文件的读出和写入)

   前段时间公司的同事让我修复日志文件中报出的异常,上千条日志文件记录,报出的Exception和Error大同小异,若是用眼睛去看,岂不是要疯了的节奏,于是就想到了使用Java的IO读取文件和写入文件,对日志进行统计处理,然后再集中解决其中的Exception和Error。下面是代码和思路解析,菜鸟上路,欢迎指正。
gourmetgarden.com.my http://www.gourmetgarden.com.my/category/location-2/penang-island/georgetown-area/ message/message_delete is empty! [parseDate=Mon Apr 06 00:00:00 UTC 2015]
gourmetgarden.com.my http://www.gourmetgarden.com.my/category/cuisine/curries/ message/message_delete is empty! [parseDate=Thu Jan 06 00:00:00 UTC 2011]
gourmetgarden.com.my http://www.gourmetgarden.com.my/photography/food-photography-portfolio-viva-dim-sum/ date is empty! [parseDate=null]
gourmetgarden.com.my http://www.gourmetgarden.com.my/2015/04/ message/message_delete is empty! [parseDate=Mon Apr 06 00:00:00 UTC 2015]
gourmetgarden.com.my http://www.gourmetgarden.com.my/category/food-conservation/penang-nanyang-flavours/ message/message_delete is empty! [parseDate=Thu Feb 06 00:00:00 UTC 2014]
gourmetgarden.com.my http://www.gourmetgarden.com.my/category/food-conservation/hand-made/ message/message_delete is empty! [parseDate=Mon Sep 16 00:00:00 UTC 2013]
gourmetgarden.com.my http://www.gourmetgarden.com.my/category/recipes-2/in/noodles-pastas/ message/message_delete is empty! [parseDate=Sun Feb 13 00:00:00 UTC 2011]
gourmetgarden.com.my http://www.gourmetgarden.com.my/category/recipes-2/chinese/ message/message_delete is empty! [parseDate=Thu Feb 06 00:00:00 UTC 2014]
gourmetgarden.com.my http://www.gourmetgarden.com.my/category/cuisine/chinese-food/hokkien/ message/message_delete is empty! [parseDate=Mon Sep 16 00:00:00 UTC 2013]
gourmetgarden.com.my http://www.gourmetgarden.com.my/category/cuisine/chinese-food/cantonese-chinese-food-cuisine/ message/message_delete is empty! [parseDate=Sat Aug 11 00:00:00 UTC 2012]
gourmetgarden.com.my http://www.gourmetgarden.com.my/category/cuisine/chinese-food/ message/message_delete is empty! [parseDate=Mon Mar 03 00:00:00 UTC 2014]
gourmetgarden.com.my http://www.gourmetgarden.com.my/category/cuisine/desserts-pastries/ message/message_delete is empty! [parseDate=Mon Oct 07 00:00:00 UTC 2013]
gourmetgarden.com.my http://www.gourmetgarden.com.my/category/cuisine/ message/message_delete is empty! [parseDate=Mon Apr 06 00:00:00 UTC 2015]
gourmetgarden.com.my http://www.gourmetgarden.com.my/photography/product-portfolio-citius-opti-germany/ date is empty! [parseDate=null]
gourmetgarden.com.my http://www.gourmetgarden.com.my/category/cuisine/indian-muslim/ message/message_delete is empty! [parseDate=Tue Jan 03 00:00:00 UTC 2012]
gourmetgarden.com.my http://www.gourmetgarden.com.my/category/location-2/penang-island/bayan-lepas/ message/message_delete is empty! [parseDate=Fri Dec 31 00:00:00 UTC 2010]
gourmetgarden.com.my http://www.gourmetgarden.com.my/2009/10/16/review-pearl-palace-restaurant-in-penang/ message/message_delete is empty! [parseDate=Fri Oct 16 00:00:00 UTC 2009]
上面是部分Log的txt.
思路分析:
(1)根据log的txt文件分析得知,我们只要截取前面的.xml规则文件名称、URL以及错误信息即可 ,另外要排除将.xml去重。
(2)代码思路
  • 读取文件之前要判断文件是否是目录,对其进行判断,以排除读取到目录的可能性。
  • 顺序读取文件:使用for循环读取目录中的文件new一个BufferedReader,用来读取文件,将读到的文件存入一个String中,然后将文件中的字符存入一个set中,将set集合返回。
  • 处理读到的文件,使用Iterator读取set中的元素,按照规律,将读取出来的数据放入map中(map中的key是不允许重复的,此处可用以控制.xml文件不重复)
  • 最后将map中的key和value读取出来,写入到一个新的文件中。(妈呀,表述又啰嗦又凌乱啊)
算了,还是直接上代码吧,各位,请多多指教。
package readFile;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.util.HashMap;
import java.util.HashSet;
import java.util.Iterator;
import java.util.Map;
import java.util.Set;


import org.apache.commons.lang3.StringUtils;


public class ReadLog{
public static void main(String[] args) throws Exception {
File file=null;
    Set set = getFileContent();//将所有读到的文件放到数组里面
    Iterator it=set.iterator();
    Map map=new HashMap<String, String>();
    String key="";
    String value="";
    while(it.hasNext()){
    String[] arr=(String[])it.next();
    for(int i=0;i<arr.length;i++){
     key=StringUtils.substringBefore(arr[i], "http").trim();
     value="http"+StringUtils.substringAfter(arr[i], "http").trim();
     map.put(key, value);
    }
    }
    int length=map.size();
    System.out.println("length:"+length);
    for(Object obj : map.keySet()){
  key=obj.toString();
  System.out.println(key);
  value = map.get(obj ).toString();
 String content=key+value+"\r\n";
// System.out.println(value);
 writeFile("C:\\Users\\zdp\\Desktop\\webspider\\error.txt",content);
 }
 }
   
private static Set<String[]> getFileContent() throws FileNotFoundException, IOException {
//读取目录
File dir = new File("C:\\Users\\zdp\\Desktop\\webspider\\");
File[] files = dir.listFiles();
Set<String[]> contentSet=new HashSet<String[]>();
for(int i=0;i<files.length;i++){
     //System.out.println("遍历出来的文件列表:"+(files[i].isDirectory()?"目录:":"文件:")+files[i].getName());
     //取出webspider.project.nodata.log.lock.xxxx文件
     if(files[i].getName().contains("error.log")){ 
     File file = new File("C:\\Users\\zdp\\Desktop\\webspider\\"+files[i].getName());
     //System.out.println(file);
    BufferedReader bf = new BufferedReader(new FileReader(file));
    String content = "";
    while(content != null){
    content = bf.readLine();
    if(content == null){
    break;
        }
    if(!content.trim().equals("")){
    contentSet.add(content.trim().split("\\s{2,}")); 
    }
    }
   bf.close();
     }
 }
   return contentSet;
 }
/*public static void writerOut(File Txt,Object newTxt){
//Scanner sc=null;
PrintWriter pw=null;
try {
if(!Txt.exists()){
File parentDir=new File(Txt.getParent());
   if(!parentDir.exists()){
    parentDir.mkdirs();
    Txt.createNewFile();
   }
  // sc=new Scanner(Txt); 
   StringBuilder sb=new StringBuilder();
sb.append("\r\n");
   sc.close();
   pw=new PrintWriter(new FileWriter(Txt),true);
}
} catch (IOException e) {
e.printStackTrace();
}
}*/
  public static void writeFile(String fileName, String content) {
       try {
           //打开一个写文件器,构造函数中的第二个参数true表示以追加形式写文件
           FileWriter writer = new FileWriter(fileName, true);
           writer.write(content);
           writer.close();
       } catch (IOException e) {
           e.printStackTrace();
       }
   }
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值