Как мога да конфигурирам нивото на JSch logger?
Дали е като Log4J, конфигурируем чрез XML?
Как мога да конфигурирам нивото на JSch logger?
Дали е като Log4J, конфигурируем чрез XML?
Изглежда, че 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
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
Просто исках да добавя малък коментар към приетия отговор, но репутацията не позволява. Съжалявам, ако този начин чрез друг отговор е зъл, но наистина искам да спомена следното.
Активирането на регистрационния файл работи по този начин и може да ви даде много информация за процеса на свързване (обмяна на ключове и други). Но на практика няма такова нещо като изход за отстраняване на грешки за основната функционалност след удостоверяване, поне за SFTP. И поглед към източника показва/потвърждава, че няма регистриране в ChannelSftp (и повечето други класове).
Така че, ако искате да активирате това, за да проверите комуникационните проблеми (след удостоверяване), това е загуба - или трябва сами да добавите подходящи изявления към източника (все още не съм го направил).
Сблъскваме се с пълно увисване (нишките за работа се забиват с дни/безкрайно) в put, get и дори ls - и разбира се доставчикът на сървъра твърди, че не е проблемът (и наистина unix sftp clientline-client работи - но не от appserver хост, до който нямаме достъп.. така че ще трябва да проверим мрежовата комуникация). Ако някой има идея, благодаря..