JSch日志记录器 - 我在哪里可以配置级别?

14

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

它是否可以通过XML文件像Log4J一样进行配置?

2个回答

34

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


1
Jsch的Logger接口当前版本的注释有一些开箱即用的实现。请检查: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);} };请注意使用Jsch包中的Logger接口。 - Realn0whereman

10

只是想对被采纳的答案添加一个小评论,但声望不允许。如果这种方式通过其他回答是邪恶的,我很抱歉,但我真的想提到以下内容。

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

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

我们遇到了完全停顿的情况(作业线程被卡住了几天/无限期),包括放置、获取甚至ls - 当然服务器提供商声称不是问题(实际上Unix sftp命令行客户端可以工作-但不从应用服务器主机,我们无法访问……所以我们必须检查网络通信)。如果有人有想法,谢谢……


事实证明,我们和服务器之间的调度程序有责任。然而,在jsch中绝对没有超时是一件不好的事情 - 这导致线程在这种情况下永远挂起(无法告诉您网络层面上发生了什么,但可能只是连接中没有更多数据包)。 - hyphan

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接