log4j(二)将日志写入数据库

时间:2022-05-10 21:55:52

           大家知道,有时候日志会记录一些很重要的信息,而这些信息保存在日志文件中我们很难进行有规律的查看和数据分析,这些信息的流失是损失重大的。

       因而,我们需要将一些必要的信息写入数据库。

       在写入之前,我们先分析一下如何将乱糟糟的日志信息,分类写入:

       (1)首先,我们先把找到一些规律,也就是分析出字段及字段值;

       (2)之后把这些字段用一个不同于日志信息中的比较特殊的符号隔开,如@@或$$这类符号。

         然后我们就可以写入数据库了:

         

import java.io.File;
import java.io.BufferedReader;
import java.io.FileInputStream;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.List;

import com.datuu.search.common.vo.SearchResultVO;

/**
 * 读取配置文件-txt格式
 * @author Y
 *
 */

public class ReadFile {
	 public static void readTxtFile(String filePath) {
		   List<SearchResultVO> infoBeanList = new ArrayList();
	       SearchResultVO infoBean=new SearchResultVO();
	       try {
	           String encoding = "utf-8";
	           File file = new File(filePath);
	           if (file.isFile() && file.exists()){ //判断文件是否存在
	               InputStreamReader read = new InputStreamReader(
	                       new FileInputStream(file), encoding);//考虑到编码格式
	               BufferedReader bufferedReader = new BufferedReader(read);
	               String lineTxt = null;
	               ModiautoParserDao operationDB=new ModiautoParserDao();
	               while ((lineTxt = bufferedReader.readLine()) != null) {
	                   String[] s=lineTxt.split("@@");
	                   infoBean.setProvince(s[1].toString());
	                   infoBean.setName(s[2].toString());
	                   infoBean.setUrl(s[3].toString());
	                   infoBean.setAddress(s[4].toString());
	                   infoBean.setTelephone(s[5].toString());
	                   infoBean.setRepairType(s[6].toString());
	                  
	                   operationDB.addRcorder(infoBean);
	                   System.out.println(lineTxt);
	               }
	               read.close();
	           } else {
	               System.out.println("找不到指定的文件");
	           }
	       } catch (Exception e) {
	           System.out.println("读取文件内容出错");
	           e.printStackTrace();
	       }
	    }
	 
	 	//主函数
	 	public static void main(String[] args) {
	       String filePath = "E:\\ring-not-search.TXT";  //配置文件路径,把日志文件改成.txt格式,再放入制定位置,如,我放在了E盘根目录下
	       ReadFile readFile=new ReadFile();  
	       readFile.readTxtFile(filePath);
	    }
	}

        下面的是一些连接数据库(mysql)的信息和表字段:

        

//数据库操作类--添加数据
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.DriverManager;
import java.sql.SQLException;

import com.datuu.search.common.vo.SearchResultVO;

public class ModiautoParserDao {

	private Connection con = null;

	public void addRcorder(SearchResultVO infoBean) throws SQLException {
		try {
			// 加载MySql的驱动类
			Class.forName("com.mysql.jdbc.Driver");
		} catch (ClassNotFoundException e) {
			System.out.println("找不到驱动程序类 ,加载驱动失败!");
			e.printStackTrace();
		}
		String url = "jdbc:mysql://localhost:3306/car?useUnicode=true&characterEncoding=utf-8";
		String user = "root";
		String password = "123456";
		Connection con = DriverManager.getConnection(url, user, password);

		String sql = "insert into t_car(province,name,logo,address,telephone,repairType)values(?,?,?,?,?,?)";

		PreparedStatement pstmt = con.prepareStatement(sql);
		pstmt.setString(1, infoBean.getProvince());
		pstmt.setString(2, infoBean.getName());
		pstmt.setString(3, infoBean.getUrl());
		pstmt.setString(4, infoBean.getAddress());
		pstmt.setString(5, infoBean.getTelephone());
		pstmt.setString(6, infoBean.getRepairType());
		
		pstmt.executeUpdate();
		if (pstmt!=null) {
			pstmt.close();
		}
		if(con!=null){
			con.close();
		}
	}
}

       好了,这样我们就可以把划分好的日志信息写入数据库了。大家对照我的上篇博客先查看日志文件,看看我的划分字段的实例。

       接下来,就很简单了~ 做你该做的数据分析吧!