Come posso configurare il livello del logger JSch?Registratore JSch - dove posso configurare il livello
È simile a Log4J configurabile tramite XML?
Come posso configurare il livello del logger JSch?Registratore JSch - dove posso configurare il livello
È simile a Log4J configurabile tramite XML?
JSch non sembra utilizzare alcun framework di registrazione noto (utilizzo JSch v0.1.49, ma l'ultima versione è v0.1.51) o qualsiasi file di configurazione XML. Così qui è quello che ho fatto:
private class JSCHLogger implements com.jcraft.jsch.Logger {
private Map<Integer, MyLevel> levels = new HashMap<Integer, MyLevel>();
private final MyLogger LOGGER;
public JSCHLogger() {
// Mapping between JSch levels and our own levels
levels.put(DEBUG, MyLevel.FINE);
levels.put(INFO, MyLevel.INFO);
levels.put(WARN, MyLevel.WARNING);
levels.put(ERROR, MyLevel.SEVERE);
levels.put(FATAL, MyLevel.SEVERE);
LOGGER = MyLogger.getLogger(...); // Anything you want here, depending on your logging framework
}
@Override
public boolean isEnabled(int pLevel) {
return true; // here, all levels enabled
}
@Override
public void log(int pLevel, String pMessage) {
MyLevel level = levels.get(pLevel);
if (level == null) {
level = MyLevel.SEVERE;
}
LOGGER.log(level, pMessage); // logging-framework dependent...
}
}
Quindi prima di utilizzare JSch:
JSch.setLogger(new JSCHLogger());
Nota che invece di MyLevel
e MyLogger
, è possibile utilizzare tutte le classi quadro di registrazione che si desidera (Log4j, Logback,. ..)
È possibile ottenere un esempio completo qui: http://www.jcraft.com/jsch/examples/Logger.java.html
Grazie per la risposta, che è utile - ma il fatto che dobbiamo implementare la nostra classe di registrazione per ottenere informazioni da JSch è INSANE. Se Spring può permetterci di accedere tramite log4j o altro, perché non Jcraft? – SteveT
@SteveT lol sì è triste ... Guardando il codice sorgente sembra che non amano gli standard Java, quindi i framework tradizionali come SLF4J o Log4j potrebbero non sembrare interessanti per loro ... – xav
volevo solo aggiungere un piccolo commento alla risposta accettata, ma la reputazione non consente. Scusa se in questo modo tramite un'altra risposta è male, ma in realtà voglio menzionare il seguente.
L'attivazione del registro funziona in questo modo e consente di ottenere molte informazioni sulla procedura di connessione (scambio di chiavi e così via). Ma non c'è praticamente nulla come l'output di debug per le funzionalità di base dopo l'autenticazione, almeno per SFTP. E uno sguardo alla sorgente mostra/conferma che non vi è alcuna registrazione in ChannelSftp (e nella maggior parte delle altre classi).
Quindi, se si desidera attivare questo al fine di ispezionare i problemi di comunicazione (dopo l'autenticazione) che è sprecato - o è necessario aggiungere dichiarazioni appropriate alla fonte da soli (non ho ancora).
Incontriamo blocchi completi (i thread di lavoro rimangono bloccati per giorni/infinito) in put, get e persino ls - e ovviamente il provider del server afferma di non essere il problema (e infatti funziona unix sftp commandline-client - ma non dall'host dell'appserver, a cui non abbiamo accesso .. quindi dovremmo controllare le comunicazioni di rete). Se qualcuno ha un'idea, grazie ..
Si è rivelato un dispatcher tra noi e il server era responsabile. Tuttavia, non è certo positivo che non ci siano assolutamente timeout in jsch, con il risultato che i thread si bloccano per sempre in casi del genere (non posso dirti cosa è successo esattamente a livello di rete, ma probabilmente semplicemente non ci sono più pacchetti nella connessione) – hyphan
grazie per la menzione – Alexey
@Alexey Se trovi una risposta utile, ti preghiamo di accettarla (controllo bianco nell'angolo in alto a sinistra di questa risposta). Indica ad altri utenti che ha veramente risposto alla domanda e che possono fidarsi. – xav