JSch SFTP 详细日志记录

JSch SFTP verbose logging

我有一个程序可以在 FTP 和 SFTP 用法之间交替使用,以便在远程服务器上执行一些操作。

对于 FTP 部分,我使用的是 Apache Commons FTP 客户端,而对于 SFTP 我使用的是 JSch 库。

除了服务器的响应外,Apache commons 可以而且将会打印出客户端向服务器发出的所有命令的详细信息。

我想对 JSch 做一些类似的事情,以便我的应用程序在两种情况下的日志记录方式保持一致。

我已尝试成功实现 JSch 库的 Logger 接口,但事实证明它无法向我提供向服务器发出的命令及其响应的详细表示。

我曾尝试寻找类似的解决方案,但它们都围绕着做一些类似于我正在寻找 SSH 会话而不是 SFTP 会话的事情。

我已经尝试创建一个 PrintStream,然后将其设置为通道的 OutputStream,但这没有用。

我也尝试实施我在这里发现的一些建议,这些建议围绕着有一个线程来捕获通道的 InputStream 和 OutputStreams,但到目前为止我还没有能够正常工作。

我的问题是,有没有人设法做到这样的事情 - 例如打印出底层 FTP 对话框 - 在使用 JSch 库时?

JSch 库不记录 SFTP 个请求和响应。

使用流也无济于事,因为:

  • ChannelSftp 使用流本身来读取数据包。如果你介入,你可能会破坏它的实现。
  • SFTP(与FTP相反)是一个二进制协议。因此,即使您设法读取流,您也会获得需要解码的二进制数据。从本质上讲,实现 SFTP 协议的日志记录是相当困难的(与 FTP 相比),因为您基本上需要显式记录每种类型的 request/response 消息的每个字段。

另请注意,SFTP 协议比 FTP 协议更底层。没有像 FTP STORRETR 这样的 "nice" 高级命令。对于每次传输,您可能会看到数千个不同的请求。应该不是,你追求的是什么。