java实现读取服务器上日志文件内容
本次操作主要为了获取flume监控日志,并提取日志中的数据(全部提取,不加筛选条件)
import ch.ethz.ssh2.*; import com.alibaba.fastjson.JSON;
@Test public void login1() { //创建远程连接,默认连接端口为22,如果不使用默认,可以使用方法 //new Connection(ip, port)创建对象 //日志文件所在服务器的地址 String ip = "10.XXX.XX.XXX"; String usr = "root"; String pwd = "XXXXXX"; //声明连接对象 Connection conn = null; Session ss=null; //参数 String date = "2018-10-10"; //根据日期获取对应日期的文件名 String directory="/usr/flume/apache-flume-1.8.0-bin/logs/"; //日志文件存放的目录 List<String> fileNameList=new ArrayList<String>(); //存放文件名 List<UserInfoEntity> userInfoEntityList=new ArrayList<UserInfoEntity>(); //存放json串中解析出来的数据对象 try { //连接远程服务器 // 连接部署服务器 conn = new Connection(ip); conn.connect(); //使用用户名和密码登录 boolean b = conn.authenticateWithPassword(usr, pwd); if (!b) { throw new IOException("Authentication failed."); } else { SFTPv3Client sft = new SFTPv3Client(conn); Vector<?> v = sft.ls(directory); //遍历该目录下的所有文件 for (int i = 0; i < v.size(); i++) { SFTPv3DirectoryEntry s = new SFTPv3DirectoryEntry(); s = (SFTPv3DirectoryEntry) v.get(i); //文件名 String filename = s.filename; if (filename.length() > 9) { String substring = filename.substring(0, 10); //获取符合要求的文件名 if (substring.equals(date)) { System.out.println("符合条件的文件名"+filename); fileNameList.add(filename); } } } //读取文件内容,并复制给UserInfo对象 for (int j = 0; j<fileNameList.size() ; j++) { ss=conn.openSession(); //打开会话 ss.execCommand("cat ".concat(directory+fileNameList.get(j))); //读取对应目录下的对应文件 InputStream is = new StreamGobbler(ss.getStdout()); BufferedReader bs = new BufferedReader(new InputStreamReader(is)); while(true){ String line=bs.readLine(); if(line==null){ break; }else{ System.out.println("------"+line); UserInfoEntity coupInfo = JSON.parseObject(String.valueOf(line), UserInfoEntity.class); userInfoEntityList.add(coupInfo); System.out.println(coupInfo.getAction()); System.out.println(coupInfo.getDate()); System.out.println(coupInfo.getUser()); } } bs.close(); } System.out.println("集合个数"+userInfoEntityList.size()); ss.close(); conn.close(); } } catch (IOException e) { System.err.printf("用户%s密码%s登录服务器%s失败!", usr, pwd, ip); e.printStackTrace(); } }
下一篇:
Wireshark之本地回环抓包