我正在使用grep4j构建Dynamic Java Webproject。 我正在使用grep4j搜索远程服务器中的日志文件,并在用户提供服务器详细信息并在浏览器中搜索时向用户显示结果。 在我的servlet中,我使用下面的代码来为每个搜索请求提供服务,如下所示,
import static org.grep4j.core.Grep4j.constantExpression;
import static org.grep4j.core.Grep4j.grep;
import static org.grep4j.core.fluent.Dictionary.on;
import static org.grep4j.core.fluent.Dictionary.options;
import static org.grep4j.core.fluent.Dictionary.with;
import org.grep4j.core.model.Profile;
import org.grep4j.core.model.ProfileBuilder;
import org.grep4j.core.result.GrepResults;
public class GrepSearcher {
private Profile remoteProfile = null;
GrepSearcher(){
}
//each request will call this method to initialize an SSH connection
GrepSearcher(String username, String password,String servername, String searchString){
this.remoteProfile = ProfileBuilder.newBuilder()
.name("DEV LOGS")
.filePath("LogFilepath")
.onRemotehost(servername)
.credentials(username,password)
.build();
}
public GrepResults getSearchResults(){
return grep(constantExpression("search query"),on(remoteProfile),with(options()));
}
}
是在服务搜索请求后立即关闭服务器的SSH连接吗?如果是这样,我应该以某种方式维护配置文件还是隐含地完成?打开一个新的SSH连接来搜索同一台服务器上的不同字符串似乎我做错了。
所有用户都将只搜索少数几台服务器。那么如何才能使这种搜索减少重载到远程服务器? 可能会保留一个静态的配置文件列表并在一些空闲时间后将其删除?
先谢谢。
答案 0 :(得分:1)
我已经快速(不是那么快)看了grep4j,我必须说没有办法在单个连接上执行多个grep
命令。 grep4j的内部只接受单个命令并从开始到结束,从连接建立到连接关闭。
它唯一能做的就是在多个配置文件上执行相同的grep命令。因此,除非您不修改源代码,否则您将能够做到您想要的。遗憾
执行此操作的最佳方法是为java搜索不同的有状态SSH客户端(不仅是grep),并从那里执行任何命令。谷歌说有很多这样的库。