0

我想使用宁静及其风暴螺栓向德鲁伊发送数据。所以我编写了一个风暴拓扑(具有宁静的依赖性)并将其编译为一个 jar 文件,然后在本地模式下使用该 jar 文件运行风暴。然而我遇到了问题:风暴螺栓显示没有错,德鲁伊的霸王节点没有记录。感觉霸主没有收到风暴螺栓发送的数据。

我想找出问题所在。我确实启用了风暴配置的调试

conf.setDebug(true);

但它只显示每个spoutand的详细信息bolt,它不显示tranquility调试日志信息。我尝试将风暴更改logback/cluster.xml

<root level="DEBUG">
  <appender-ref ref="A1"/>
</root>

但它似乎不起作用。我尝试在项目的顶级目录中添加一个 log4j.xml:

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE log4j:configuration SYSTEM "log4j.dtd">
<log4j:configuration debug="true"
    xmlns:log4j='http://jakarta.apache.org/log4j/'>

    <appender name="console" class="org.apache.log4j.ConsoleAppender">
        <layout class="org.apache.log4j.PatternLayout">
        <param name="ConversionPattern" 
          value="%d{yyyy-MM-dd HH:mm:ss} %-5p %c{1}:%L - %m%n" />
        </layout>
    </appender>

    <root>
        <level value="DEBUG" />
        <appender-ref ref="console" />
    </root>

</log4j:configuration>

它也不起作用。

我对宁静的源代码进行了一些挖掘,发现宁静依赖于依赖于 log4j 的ladylog 库,所以我认为在项目中添加一个 log4j.xml 将启用调试模式并可以看到这个 BeamBot的调试输出

我完全糊涂了,因为现在我写了一个使用 tranquiity 库的 jar,它使用 loglady 库,它使用 log4j,而我的 jar 由 Storm 运行,使用 logback。谁能给我一些建议?

4

1 回答 1

0

然后在本地模式下使用带有该 jar 文件的 runstorm

由于您以本地模式运行 jar 文件,因此修改logback/cluster.xml. 通常,Storm 会像在本地模式下一样从特定依赖项中读取默认配置storm-core-0.9.4.jar,除非您在拓扑中手动更改配置。您应该在集群模式下运行拓扑以进行尝试。

另一方面,由于 log4j 有很多冲突的问题,我们像这样使用slf4j作为 log4j 的默认库

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

public class MyBolt {
    private static final Logger LOG = LoggerFactory
            .getLogger(MyBolt.class);
}

并像这样排除所有依赖项中的所有其他 log4j 库

<dependency>
    <groupId>org.apache.kafka</groupId>
    <artifactId>kafka_2.10</artifactId>
    <version>0.8.2.1</version>
    <scope>provided</scope>
    <exclusions>
        <exclusion>
            <groupId>org.slf4j</groupId>
            <artifactId>slf4j-log4j12</artifactId>
        </exclusion>
        <exclusion>
            <groupId>log4j</groupId>
            <artifactId>log4j</artifactId>
        </exclusion>
    </exclusions>
</dependency>

希望这可以帮助。

于 2015-06-29T07:07:15.127 回答