JSch logger - къде мога да конфигурирам нивото

Как мога да конфигурирам нивото на JSch logger?

Дали е като Log4J, конфигурируем чрез XML?


person Alexey    schedule 09.11.2014    source източник
comment
благодаря за споменаването   -  person Alexey    schedule 10.11.2014
comment
@Alexey Ако намирате отговор за полезен, моля, приемете го (бяла отметка в горния ляв ъгъл на този отговор). Той ще покаже на другите потребители, че наистина е отговорил на въпроса и че могат да му се доверят.   -  person xav    schedule 22.11.2014


Отговори (2)


Изглежда, че JSch не използва известна рамка за регистриране (използвам JSch v0.1.49, но последната версия е v0.1.51), или който и да е XML конфигурационен файл. Ето какво направих:

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

След това, преди да използвате JSch:

JSch.setLogger(new JSCHLogger());

Обърнете внимание, че вместо MyLevel и MyLogger, можете да използвате произволни класове на рамка за регистриране, които искате (Log4j, Logback, ...)

Можете да получите пълен пример тук: http://www.jcraft.com/jsch/examples/Logger.java.html

person xav    schedule 10.11.2014
comment
Благодаря за отговора, който е полезен - но фактът, че трябва да внедрим наш собствен клас за регистриране, за да извлечем информация от JSch, е ЛУД. Ако Spring може да ни позволи да влезем чрез log4j или каквото и да е, защо не и Jcraft? - person SteveT; 29.03.2017
comment
@SteveT хаха да, тъжно е... Гледайки изходния код, изглежда, че те наистина не харесват стандартите на Java, така че традиционните рамки като SLF4J или Log4j може да не им изглеждат интересни... - person xav; 29.03.2017
comment
Коментарите за текущата версия на интерфейса Logger на Jsch имат някаква работа извън кутията Проверете го: public static final Logger SIMPLE_LOGGER=new Logger(){ public boolean isEnabled(int level){return true;} public void log(int level, String message){System.err.println(message);} }; Забележете, че не забравяйте да използвате интерфейса Logger от пакета Jsch. - person Realn0whereman; 09.08.2018
comment
Чудя се как да нулирам предишния регистратор, защото JSch.getLogger() е частен пакет. Бих искал временно да настроя собствен регистратор чрез JSch.setLogger(), след което да се върна обратно към предишния. - person Max Spring; 10.10.2019

Просто исках да добавя малък коментар към приетия отговор, но репутацията не позволява. Съжалявам, ако този начин чрез друг отговор е зъл, но наистина искам да спомена следното.

Активирането на регистрационния файл работи по този начин и може да ви даде много информация за процеса на свързване (обмяна на ключове и други). Но на практика няма такова нещо като изход за отстраняване на грешки за основната функционалност след удостоверяване, поне за SFTP. И поглед към източника показва/потвърждава, че няма регистриране в ChannelSftp (и повечето други класове).

Така че, ако искате да активирате това, за да проверите комуникационните проблеми (след удостоверяване), това е загуба - или трябва сами да добавите подходящи изявления към източника (все още не съм го направил).

Сблъскваме се с пълно увисване (нишките за работа се забиват с дни/безкрайно) в put, get и дори ls - и разбира се доставчикът на сървъра твърди, че не е проблемът (и наистина unix sftp clientline-client работи - но не от appserver хост, до който нямаме достъп.. така че ще трябва да проверим мрежовата комуникация). Ако някой има идея, благодаря..

person hyphan    schedule 13.04.2015
comment
Оказа се, че диспечерът между нас и сървъра е отговорен. Със сигурност обаче не е хубаво, че няма абсолютно никакви изчаквания в jsch - което води до висящи нишки завинаги в такива случаи (не мога да ви кажа какво точно се е случило на ниво мрежа, но вероятно просто няма повече пакети във връзката) - person hyphan; 24.04.2015