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

2022-09-04 05:47:13

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

它像Log4J一样可以通过XML配置吗?


答案 1

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());

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

你可以在这里得到一个完整的例子:http://www.jcraft.com/jsch/examples/Logger.java.html


答案 2

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

日志激活以这种方式工作,它可以为您提供有关连接过程(密钥交换等)的大量信息。但是,在身份验证后,核心功能实际上没有调试输出这样的东西,至少对于SFTP而言。查看源代码显示/确认ChannelSftp(以及大多数其他类)中没有日志记录。

因此,如果您想激活它以检查通信问题(身份验证后),那将是浪费的 - 或者您需要自己向源代码添加合适的语句(我还没有)。

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


推荐