当我使用 Camel 连接到 sftp 服务器并且密码错误时,我没有得到任何有关此的信息。如果由于密码错误而未尝试连接,我该如何告诉camel执行某些操作(例如记录日志)。如果用户名错误也是如此。 下面是我的骆驼路线的示例。
CamelContext camelContext = new DefaultCamelContext();
camelContext.addRoutes(new RouteBuilder() {
@Override
public void configure() throws Exception {
errorHandler(loggingErrorHandler().level(LoggingLevel.DEBUG));
from("sftp://my.sftp.server.com:21111/myDir&username=user&password=secret")
.to("file:test");
});
camelContext.start();
据我了解, errorHandler(loggingErrorHandler().level(LoggingLevel.DEBUG)); 行应该能够记录发生的一切。
有什么想法吗?
错误一定在某个地方被抑制了; Camel FTP 组件以 TRACE 级别记录内容,应该包括所有内容。你用slf4j吗?如果没有,您可以通过在类路径中创建一个名为“log4j.properties”的文件来启用它。
将此文件的内容设置为:
log4j.rootLogger=INFO, out
og4j.logger.org.apache.camel=DEBUG
这将使Camel的日志记录级别变为DEBUG。这意味着你应该得到很多日志,包括登录失败。
您还需要将其包含在您的 pom.xml 中(如果使用 Maven):
<dependencies>
<dependency>
<groupId>commons-logging</groupId>
<artifactId>commons-logging</artifactId>
</dependency>
<dependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
</dependency>
</dependencies>
请参阅此常见问题解答
它也适用于 FTP。
您需要将路由使用者与 Camel 错误处理程序桥接起来,以使路由 errorHandler 做出反应。这是一个先有鸡还是先有蛋的情况,错误处理程序通常仅在您有要路由的 Exchange 时才会做出反应。但是,如果 FTP 使用者在创建 Exchange 之前失败,则没有 Exchange 可供路由。这就是桥梁可以做的事情。
我发现 Camel 将其记录在信息级别。