2014-11-09 12 views
6

Jak mogę skonfigurować poziom rejestratora JSch?Rejestrator JSch - gdzie mogę skonfigurować poziom

Czy to jak Log4J konfigurowalny przez XML?

+0

dziękuję za wzmiankę – Alexey

+0

@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

Odpowiedz

11

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

+1

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

+0

@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

6

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ę.

+0

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

Powiązane problemy