Jak mogę skonfigurować poziom rejestratora JSch?Rejestrator JSch - gdzie mogę skonfigurować poziom
Czy to jak Log4J konfigurowalny przez XML?
Jak mogę skonfigurować poziom rejestratora JSch?Rejestrator JSch - gdzie mogę skonfigurować poziom
Czy to jak Log4J konfigurowalny przez XML?
JSch nie używa żadnej znanej architektury rejestrowania (ja używam JSch v0.1.49, ale ostatnia wersja to v0.1.51) lub jakiegokolwiek pliku konfiguracyjnego XML. Więc tutaj jest to, co robiłam:
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...
}
}
Następnie przed użyciem jsch:
JSch.setLogger(new JSCHLogger());
Zauważ, że zamiast MyLevel
i MyLogger
można używać klas ramowych rejestrowania chcesz (Log4j, Logback,. ..)
można uzyskać pełny przykład tutaj: http://www.jcraft.com/jsch/examples/Logger.java.html
Dzięki za odpowiedź, która jest pomocna - ale fakt, że musimy wdrożyć własną klasę logowania, aby uzyskać informacje z JSch jest INSANE. Jeśli Spring pozwoli nam logować się przez log4j lub cokolwiek, dlaczego nie Jcraft? – SteveT
@SteveT lol tak jest smutno ... Patrząc na kod źródłowy wydaje się, że nie lubią standardów Java, więc tradycyjne framewiry takie jak SLF4J czy Log4j mogą nie wyglądać interesująco ... – xav
prostu chciał dodać mały komentarz do zaakceptowanej odpowiedzi, ale reputacja nie pozwala. Przepraszam, jeśli ta droga za pośrednictwem innej odpowiedzi jest zła, ale naprawdę chcę wspomnieć o następujących.
Aktywacja dziennika działa w ten sposób i może dostarczyć Ci wiele informacji o procesie połączenia (wymiana kluczy itp.). Ale praktycznie nie ma czegoś takiego jak wyjście do debugowania dla podstawowej funkcjonalności po uwierzytelnieniu, przynajmniej dla SFTP. A spójrz na źródła pokazuje/potwierdza, że nie ma logowania w ChannelSftp (i większości innych klas).
Jeśli chcesz go aktywować, aby sprawdzić problemy komunikacyjne (po uwierzytelnieniu), które zostały zmarnowane - lub musisz samodzielnie dodać odpowiednie instrukcje do źródła (jeszcze nie zrobiłem).
Napotykamy kompletne zawieszenie (wątki robocze utkną na kilka dni/nieskończone) w put, get, a nawet ls - i oczywiście dostawca serwera twierdzi, że nie stanowi problemu (i rzeczywiście działa polecenie wiersza polecenia unix sftp - ale nie z hosta appserver, do którego nie mamy dostępu, więc musielibyśmy sprawdzić komunikację sieciową). Jeśli ktoś ma pomysł, dziękuję.
Okazało się, że dyspozytor między nami a serwer był odpowiedzialny. Jednak na pewno nie jest dobrze, że nie ma absolutnie żadnych limitów czasu w jsch - co powoduje, że wątki wisi na zawsze w takich przypadkach (nie mogę powiedzieć, co dokładnie stało się na poziomie sieci, ale prawdopodobnie po prostu nie więcej pakietów w połączeniu) – hyphan
dziękuję za wzmiankę – Alexey
@Alexey Jeśli uważasz, że odpowiedź jest przydatna, zaakceptuj ją (biały czek w lewym górnym rogu tej odpowiedzi). Będzie wskazywać innym użytkownikom, że naprawdę odpowiedział na pytanie i że mogą mu ufać. – xav