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之本地回环抓包
