Java JSch登录到文件中
我想将JSch日志保存在文件中,因为它在控制台中不显示任何内容 这是我的代码:Java JSch登录到文件中,java,logging,ssh,jsch,Java,Logging,Ssh,Jsch,我想将JSch日志保存在文件中,因为它在控制台中不显示任何内容 这是我的代码: public boolean openConnection() throws ItsSshException { boolean connectSuccess = false; JSch.setLogger(new MyLogger()); Properties config = new Properties(); config.put("StrictHostKeyChecking
public boolean openConnection() throws ItsSshException {
boolean connectSuccess = false;
JSch.setLogger(new MyLogger());
Properties config = new Properties();
config.put("StrictHostKeyChecking", "no");
jschSSH.setConfig(config);
try {
sshSession = jschSSH.getSession(username, hostname, port);
sshSession.setPassword(password);
sshSession.connect(connectionTimeout);
LOGGER.info("Connection timeout : " + connectionTimeout);
Thread.sleep(1000);
sshHChannel = sshSession.openChannel("shell");
sshHChannel.connect();
in = sshHChannel.getInputStream();
out = new PrintStream(sshHChannel.getOutputStream());
clearInitialSocketState();
connectSuccess = true;
} catch (Exception e) {
LOGGER.error("Error during connectiong to host: " + hostname +
", port: " + port + "!", e);
throw new ItsSshException("Error during connectiong to host: " + e.getMessage());
}
LOGGER.info("connectSuccess : " + connectSuccess);
return connectSuccess;
}
public static class MyLogger implements com.jcraft.jsch.Logger {
static java.util.Hashtable name=new java.util.Hashtable();
static{
name.put(new Integer(DEBUG), "DEBUG: ");
name.put(new Integer(INFO), "INFO: ");
name.put(new Integer(WARN), "WARN: ");
name.put(new Integer(ERROR), "ERROR: ");
name.put(new Integer(FATAL), "FATAL: ");
}
public boolean isEnabled(int level){
return true;
}
public void log(int level, String message){
System.err.print(name.get(new Integer(level)));
System.err.println(message);
}
}
将jsch记录器放在何处以获取文件中的一些信息。我尝试过但从未成功:D在MyLogger.log
中使用:
public void log(int level, String message){
LOGGER.log(loggerlevel, message);
}
完整的代码可以如下所示:
static private class MyJSchLogger implements com.jcraft.jsch.Logger {
private java.util.logging.Logger logger;
public MyJSchLogger(java.util.logging.Logger logger) {
this.logger = logger;
}
public boolean isEnabled(int level){
return true;
}
public void log(int level, String message){
java.util.logging.Level l;
switch (level)
{
case com.jcraft.jsch.Logger.DEBUG:
l = java.util.logging.Level.FINE;
break;
case com.jcraft.jsch.Logger.INFO:
l = java.util.logging.Level.INFO;
break;
case com.jcraft.jsch.Logger.WARN:
l = java.util.logging.Level.WARNING;
break;
default:
case com.jcraft.jsch.Logger.ERROR:
case com.jcraft.jsch.Logger.FATAL:
l = java.util.logging.Level.SEVERE;
break;
}
this.logger.log(l, message);
}
}
要将记录器与JSch关联,请使用:
JSch.setLogger(new MyJSchLogger(logger));
假设Java记录器存在
如果没有,您可以创建一个类似于:
java.util.logging.Logger logger = java.util.logging.Logger.getLogger("MyJSch");
java.util.logging.FileHandler fh = new java.util.logging.FileHandler("C:\\path\\jsch.log");
java.util.logging.SimpleFormatter formatter = new java.util.logging.SimpleFormatter();
fh.setFormatter(formatter);
logger.addHandler(fh);
不过,如果您只需要登录到文件,您可以直接执行以下操作:
JSch.setLogger(new com.jcraft.jsch.Logger() {
Path path = Paths.get("C:\\path\\jsch.log");
@Override
public boolean isEnabled(int level){
return true;
}
public void log(int level, String message){
try {
StandardOpenOption option =
!Files.exists(path) ? StandardOpenOption.CREATE : StandardOpenOption.APPEND;
Files.write(path, java.util.Arrays.asList(message), option);
} catch (IOException e) {
System.err.println(message);
}
}
});