library example java logging ssh jsch

java - example - JSch inicia sesión en archivos



jsch java example sftp (1)

Use Logger.log en MyLogger.log :

public void log(int level, String message){ LOGGER.log(loggerlevel, message); }

Un código completo puede ser como:

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

Para asociar el registrador con JSch use:

JSch.setLogger(new MyJSchLogger(logger));

Suponiendo que el logger Java exista.

Si no, puede crear uno como:

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

Aunque si solo necesita iniciar sesión en un archivo, puede hacerlo directamente:

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

Quiero guardar los registros de JSch en el archivo porque no muestra nada en la consola.

Este es mi código:

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

Dónde colocar el registrador jsch para obtener información en el archivo. He intentado pero nunca he tenido éxito: D