日志工具类

来源:互联网 发布:网络神偷破解安卓版 编辑:程序博客网 时间:2024/05/16 17:47
package com.sunt.test.logutil;

import java.io.BufferedReader;
import java.io.File;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.io.Writer;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.List;


public class Log {
    private Log() {
    }

    public static <T> void printErr(T e, String path) {
        // 参数校验e、path
        if (e == null || path == null) {
            System.exit(0);
        }
        // 获取日志条数与文件对象
        List<Object> list = getCount(path);
        int no = (int) list.get(0);
        File file = (File) list.get(1);
        // 声明Writer对象
        Writer writer = null;
        try {
            // 初始化Writer并且设置追加
            writer = new FileWriter(file, true);
            // 获取时间与日期,通过日期的格式化对象转换成字符串String
            String dete = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss")
                    .format(Calendar.getInstance().getTime());
            // 获取异常发生所在位置的对象StackTraceElement的数组
            StackTraceElement[] arrSte = ((Throwable) e).getStackTrace();
            // 写入日志文件第几条日志
            writer.write("第" + no);
            // 写入日志文件异常所发生的时间与日期
            writer.write("条,发生时间为:" + dete + ", 发生位置为:");
            // 写入日志文件异常所在的位置,以及所有调用到错误语句的位置
            for (int i = 0; i < arrSte.length; i++) {
                writer.write(" " + arrSte[i]);
            }
            // 写入日志文件发生异常的错误信息
            writer.write(", 错误信息为:" + e);
            // 写入完毕换行
            writer.write("\r\n");
        } catch (IOException err) {
        } finally {
            try {
                // 关闭writer之前需判断writer是否为空避免空指针 异常
                if (writer != null) {
                    writer.close();
                }
            } catch (IOException e1) {
            }
        }

    }

    /**
     * 用来获取当前写入的条数并且根据路径构建出File文件对象并返回
     * 
     * @param path
     * @return
     */
    private static List<Object> getCount(String path) {
        // 创建要返回的List对象
        List<Object> list = new ArrayList<>();
        // 初始化日志条数为1
        int count = 1;
        // 构建File文件对象(注:如果该文件不存在,会自动创建,亲测!)
        File file = new File(path);
        // 声明文件读取对象BufferedReader
        BufferedReader br = null;
        try {
            // 初始化BufferedReader
            br = new BufferedReader(new FileReader(file));
            // 开始读写文件,如果读到的这行不为空说明还有,就count++
            while (br.readLine() != null) {
                count++;
            }
        } catch (IOException e) {
        } finally {
            try {
                // 关闭br之前需判断br是否为空避免空指针 异常
                if (br != null) {
                    br.close();
                }
            } catch (IOException e) {
            }
        }
        // 读取完毕之后向List集合中添加count和file对象
        list.add(count);
        list.add(file);

        // 返回List集合
        return list;
    }
}
0 0
原创粉丝点击