JSch记录器 – 我在哪里可以配置级别

如何配置JSch记录器的级别?

是否可以通过XML配置Log4J?

JSch似乎没有使用任何已知的日志记录框架(我使用的是JSch v0.1.49,但最后一个版本是v0.1.51),或者任何XML配置文件。 所以这就是我所做的:

private class JSCHLogger implements com.jcraft.jsch.Logger { private Map levels = new HashMap(); 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()); 

请注意,您可以使用所需的任何日志框架类而不是MyLevelMyLogger (Log4j,Logback,…)

您可以在此处获得完整的示例: http : //www.jcraft.com/jsch/examples/Logger.java.html

只是想在接受的答案中添加一个小评论,但声誉不允许。 对不起,如果这种方式通过另一个答案是邪恶的,但真的要提到以下。

日志激活以这种方式工作,它可以为您提供有关连接过程(密钥交换等)的大量信息。 但是在validation之后几乎没有针对核心function的调试输出,至少对于SFTP。 看一下源代码显示/确认ChannelSftp(以及其他大多数类)都没有登录。

因此,如果您想激活它以检查浪费的通信问题(在身份validation之后) – 或者您需要自己向源添加合适的语句(我还没有)。

我们在put,get甚至ls中遇到完全挂起(工作线程卡住了几天/无限) – 当然服务器提供商声称不是问题(实际上unix sftp命令行客户端工作 – 但不是来自appserver主机,我们无法访问..因此我们必须检查网络通信)。 如果有人有想法,谢谢..