我们有一个架构,其中有数百个Java组件部署在多个服务器上(40多个)。业务流程涉及将数据从一个组件传递到另一个组件。每个组件都会吐出日志。每次出现问题时,我都要继续查看各种服务器日志目录(全部映射为不同的网络驱动器)并查看日志文件。
我想知道最快的方法是从40多台服务器上的所有这些文件夹中复制并复制到我的本地计算机。我想创建一个可以执行此操作的程序/脚本。我可以在开始研究问题之前运行此脚本。
我编写了自己的java程序并使用了FileUtils.copyDirectory。在循环中调用40个奇数源目录和我的本地目标目录。不幸的是,如果要写入源文件,FileUtils.copyDirectory会抛出异常。
如果我能够实施一个解决方案,这将是一个巨大的帮助,以便我的问题搜索过程跨越这些文件。
这是在Windows上。
我熟悉java。可以尝试其他语言。请不要购买任何产品。这只是一个开发人员黑客,我正在考虑开发以解决我的问题。
答案 0 :(得分:2)
public static int extraction()
{
String hostname = "*server host name*";
String username = "*enter username*";
String password = "*enter password*";
String copyFrom = "*server path for example /home/file/abc.png *";
String copyTo = "*local path for example C:\\Documents *";
JSch jsch = new JSch();
Session session = null;
System.out.println("Trying to connect.....");
try
{
session = jsch.getSession(username, hostname, 22);
session.setConfig("StrictHostKeyChecking", "no");
session.setPassword(password);
session.connect();
Channel channel = session.openChannel("sftp");
channel.connect();
ChannelSftp sftpChannel = (ChannelSftp) channel;
sftpChannel.get(copyFrom, copyTo);
sftpChannel.exit();
session.disconnect();
}
catch (JSchException e)
{
e.printStackTrace();
}
catch (SftpException e)
{
e.printStackTrace();
}
System.out.println("Done !!");
return 0;
}
这是我用来从单一来源获取服务器日志文件的方法,但可以重新编写以获取所需数量的方法。请原谅格式,因为这是我使用的格式并且觉得舒服。