当前位置: 首页 > 知识库问答 >
问题:

JSch登录文件

严宏朗
2023-03-14

我想保存JSch日志文件,因为它不显示任何东西在控制台。

这是我的代码:

public boolean openConnection() throws ItsSshException {
    boolean connectSuccess = false;

    JSch.setLogger(new MyLogger());

    Properties config = new Properties();
    config.put("StrictHostKeyChecking", "no");
    jschSSH.setConfig(config);
    try {
        sshSession = jschSSH.getSession(username, hostname, port);
        sshSession.setPassword(password);
        sshSession.connect(connectionTimeout);
        LOGGER.info("Connection timeout : " + connectionTimeout);
        Thread.sleep(1000);
        sshHChannel = sshSession.openChannel("shell");
        sshHChannel.connect();
        in = sshHChannel.getInputStream();
        out = new PrintStream(sshHChannel.getOutputStream());
        clearInitialSocketState();
        connectSuccess = true;
    } catch (Exception e) {
        LOGGER.error("Error during connectiong to host: " + hostname +
                     ", port: " + port + "!", e);
        throw new ItsSshException("Error during connectiong to host: " + e.getMessage());
    }
    LOGGER.info("connectSuccess : " + connectSuccess);
    return connectSuccess;
}

public static class MyLogger implements com.jcraft.jsch.Logger {
    static java.util.Hashtable name=new java.util.Hashtable();
    static{
        name.put(new Integer(DEBUG), "DEBUG: ");
        name.put(new Integer(INFO), "INFO: ");
        name.put(new Integer(WARN), "WARN: ");
        name.put(new Integer(ERROR), "ERROR: ");
        name.put(new Integer(FATAL), "FATAL: ");
    }
    public boolean isEnabled(int level){
        return true;
    }
    public void log(int level, String message){
        System.err.print(name.get(new Integer(level)));
        System.err.println(message);
    }
}

jsch记录器放在哪里来获取文件中的一些信息。我试过了,但从来没有成功过: D

共有1个答案

荆梓
2023-03-14

使用记录器。在MyLogger中记录。日志

public void log(int level, String message){
    LOGGER.log(loggerlevel, message);
}

完整的代码可以是:

static private class MyJSchLogger implements com.jcraft.jsch.Logger {
    private java.util.logging.Logger logger;

    public MyJSchLogger(java.util.logging.Logger logger) {
        this.logger = logger;
    }

    public boolean isEnabled(int level){
        return true;
    }
    public void log(int level, String message){
        java.util.logging.Level l;
        switch (level)
        {
        case com.jcraft.jsch.Logger.DEBUG:
            l = java.util.logging.Level.FINE;
            break;
        case com.jcraft.jsch.Logger.INFO:
            l = java.util.logging.Level.INFO;
            break;
        case com.jcraft.jsch.Logger.WARN:
            l = java.util.logging.Level.WARNING;
            break;
        default:
        case com.jcraft.jsch.Logger.ERROR:
        case com.jcraft.jsch.Logger.FATAL:
            l = java.util.logging.Level.SEVERE;
            break;
        }
        this.logger.log(l, message);
    }
}

要将记录器与JSch关联,请使用:

JSch.setLogger(new MyJSchLogger(logger));

假设Java记录器存在。

如果没有,你可以创建一个像:

java.util.logging.Logger logger = java.util.logging.Logger.getLogger("MyJSch");
java.util.logging.FileHandler fh = new java.util.logging.FileHandler("C:\\path\\jsch.log");
java.util.logging.SimpleFormatter formatter = new java.util.logging.SimpleFormatter();  
fh.setFormatter(formatter);  
logger.addHandler(fh);

不过,如果您只需要登录到一个文件,您可以直接这样做:

JSch.setLogger(new com.jcraft.jsch.Logger() {
    Path path = Paths.get("C:\\path\\jsch.log");
    @Override
    public boolean isEnabled(int level){
        return true;
    }
    public void log(int level, String message){
        try {
            StandardOpenOption option =
               !Files.exists(path) ? StandardOpenOption.CREATE : StandardOpenOption.APPEND;
            Files.write(path, java.util.Arrays.asList(message), option);
        } catch (IOException e) {
            System.err.println(message);
        }
    }
});

 类似资料:
  • 我的应用程序使用angular 7和spring boot 2运行。每次用户与应用程序交互(单击一些按钮或链接)时,我都需要在json文件中存储一些数据。json应该如下所示(只是一个示例): > 使用异步调用webservice的角度拦截器手动执行此操作。然后,webservice将调用一个异步spring服务,该服务将数据追加到json文件中。使用这个解决方案,我将不得不擦除一周以上的数据,这

  • 18.5 分析登录文件 登录文件的分析是很重要的!你可以自行以 vim 或者是 journalctl 进入登录文件去查阅相关的信息。而系统也提供一些软件可以让你从登录文件中取得数据, 例如之前谈过的 last, lastlog, dmesg 等等指令。不过,这些数据毕竟都非常的分散,如果你想要一口气读取所有的登录信息, 其实有点困扰的。不过,好在 CentOS 有提供 logwatch 这个登录文

  • 18.1 什么是登录文件 “详细而确实的分析以及备份系统的登录文件”是一个系统管理员应该要进行的任务之一。 那么什么是登录文件呢?简单的说,就是记录系统活动信息的几个文件, 例如:何时、何地 (来源 IP)、何人 (什么服务名称)、做了什么动作 (讯息登录啰)。 换句话说就是:记录系统在什么时候由哪个程序做了什么样的行为时,发生了何种的事件等等。 18.1.1 CentOS 7 登录文件简易说明

  • 18.2 rsyslog.service :记录登录文件的服务 上一小节提到说 Linux 的登录文件主要是由 rsyslog.service 在负责,那么你的 Linux 是否有启动 rsyslog 呢?而且是否有设置开机时启动呢?呵呵!检查一下先: [[email protected] ~]# ps aux | grep rsyslog USER PID %CPU %MEM VSZ

  • 我正在尝试使用JSch从SFTP服务器下载文件到我的本地机器。无论文件大小如何,它只下载16371字节的数据并结束传输。它不会引发任何异常。如果文件小于16371字节,它将成功传输,但对于任何较大的文件,传输都会导致文件损坏。

  • 用户登录 调用地址 https://api.bilibili.tv/login 需要 App Key;此API调用权限需要额外申请,具体请联系网站客服。 参数 字段 必选 类型 说明 userid/email true string 帐号名或邮箱 pwd true string 明文密码 captcha true string 验证码 (请访问 https://secure.bilibili.tv