Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/logging/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java JSch记录器-在哪里可以配置级别_Java_Logging_Log4j_Jsch - Fatal编程技术网

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

Java JSch记录器-在哪里可以配置级别,java,logging,log4j,jsch,Java,Logging,Log4j,Jsch,如何配置JSch记录器的级别 它类似于通过XML配置Log4J吗?JSch似乎没有使用任何已知的日志框架(我使用JSch v0.1.49,但最后的版本是v0.1.51)或任何XML配置文件。以下是我所做的: 私有类JSCHLogger实现com.jcraft.jsch.Logger{ 私有映射级别=新HashMap(); 私人最终MyLogger记录器; 公共JSCHLogger(){ //JSch级别和我们自己的级别之间的映射 levels.put(调试,MyLevel.FINE); leve

如何配置JSch记录器的级别


它类似于通过XML配置Log4J吗?

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

私有类JSCHLogger实现com.jcraft.jsch.Logger{
私有映射级别=新HashMap();
私人最终MyLogger记录器;
公共JSCHLogger(){
//JSch级别和我们自己的级别之间的映射
levels.put(调试,MyLevel.FINE);
levels.put(INFO,MyLevel.INFO);
水平。放置(警告,我的水平。警告);
levels.put(错误,我的级别严重);
水平。放置(致命,我的水平。严重);
LOGGER=MyLogger.getLogger(…);//根据您的日志框架,您可以在此处查看任何内容
}
@凌驾
公共布尔值isEnabled(int-pLevel){
return true;//此处启用所有级别
}
@凌驾
公共无效日志(int-pLevel,字符串pMessage){
MyLevel level=levels.get(pLevel);
如果(级别==null){
级别=我的严重级别;
}
LOGGER.log(level,pMessage);//日志记录依赖于框架。。。
}
}
然后在使用JSch之前:

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


你可以在这里得到一个完整的例子:

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

日志激活就是这样工作的,它可以为您获取很多关于连接过程的信息(密钥交换等)。但是,至少对于SFTP来说,在认证之后,核心功能实际上没有调试输出这样的东西。查看源代码可以发现/确认ChannelSftp(以及大多数其他类)中没有登录

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


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

谢谢你的建议mention@Alexey如果你觉得答案有用,请接受它(答案左上角的白色复选框)。它将向其他用户表明它确实回答了这个问题,并且他们可以信任它。事实证明,是我们和服务器之间的调度员负责的。然而,jsch中绝对没有超时肯定不是一件好事-在这种情况下会导致线程永远挂起(无法告诉您在网络级别到底发生了什么,但可能只是连接中没有更多的数据包)谢谢您的回答,这是很有帮助的——但我们必须实现自己的日志类才能从JSch中获取信息这一事实是愚蠢的。如果Spring允许我们通过log4j或其他什么方式登录,为什么不使用Jcraft?@SteveT lol是的,这很悲哀。。。从源代码来看,他们似乎并不真正喜欢Java标准,因此像SLF4J或Log4j这样的传统框架对他们来说可能不感兴趣……当前版本的Jsch的Logger接口的注释有一些现成的工作,请检查:
public static final Logger SIMPLE\u Logger=new Logger(){public boolean isEnabled(int-level){return true;}public void log(int-level,String-message){System.err.println(message);};
注意一定要使用Jsch包中的接口记录器。我想知道如何重置以前的记录器,因为Jsch.getLogger()是包私有的。我想通过JSch.setLogger()临时设置我自己的记录器,然后恢复到上一个记录器。
JSch.setLogger(new JSCHLogger());