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();
        }

    }
经验分享 程序员 微信小程序 职场和发展