14

当我们从本地集群运行时,我想关闭默认提供的日志记录功能。目前它在控制台上记录了很多信息。

以下是日志示例:

261 [main] INFO  backtype.storm.daemon.task  - Shut down task Getting-Started-Toplogie-1-1376388324:2
2261 [main] INFO  backtype.storm.daemon.task  - Shutting down task Getting-Started-Toplogie-1-1376388324:1
2262 [Thread-24] INFO  backtype.storm.util  - Async loop interrupted!
2276 [main] INFO  backtype.storm.daemon.task  - Shut down task Getting-Started-Toplogie-1-1376388324:1
2278 [main] INFO  backtype.storm.daemon.worker  - Terminating zmq context
2279 [main] INFO  backtype.storm.daemon.worker  - Disconnecting from storm cluster state context
2279 [main] INFO  backtype.storm.daemon.worker  - Waiting for heartbeat thread to die
2279 [Thread-27] INFO  backtype.storm.util  - Async loop interrupted!
2308 [main] INFO  backtype.storm.testing  - Shutting down in process zookeeper
2309 [main] INFO  backtype.storm.testing  - Done shutting down in process zookeeper
2309 [main] INFO  backtype.storm.testing  - Deleting temporary path /tmp/255fe7c8-1407-4f43-8771-2217905232ab

在浏览了许多文档之后,我最终得到了下面的代码,我可以在课堂上关闭日志记录。

static Logger logger = Logger.getLogger(TopologyMain.class);

public static void main(String[] args) throws InterruptedException, AlreadyAliveException, InvalidTopologyException {        
      logger.setLevel((Level) Level.FATAL);
      logger.debug("Here is some DEBUG");
      logger.info("Here is some INFO");
      logger.warn("Here is some WARN");
      logger.error("Here is some ERROR");
      logger.fatal("Here is some FATAL");
 }
}

输出(正确):0 [main] FATAL TopologyMain - Here is some FATAL

但我需要更改storm/zookeper等的日志配置。

有人可以帮忙吗?


更新:以下是我尝试过的代码,但它不起作用。我尝试使用版本 0.7.1、0.8.2 和 0.9.0-wip*

        //Configuration
        Config conf = new Config();
        conf.put(Config.TOPOLOGY_DEBUG, false);  //Tried this alone
        conf.setDebug(false);  //Tried this alone & tried both together as well.. No change :-(
4

6 回答 6

11

Storm 真的很健谈,并且会提供很多信息,但是如果您想使其静音,可以将Config.TOPOLOGY_DEBUG设置为 false。

当您将 Config.TOPOLOGY_DEBUG 设置为 true 时,您是在告诉 Storm 每次从任何 spout 或 bolt 发出元组时记录一条消息。

于 2013-08-13T12:19:59.973 回答
2

在 log4j.xml 中添加以下代码。它只会打印您想要的日志和控制台输出:-

<logger name="org.apache.zookeeper">
        <level value="warn"/>
    </logger>

    <logger name="backtype.storm">
        <level value="warn"/>
    </logger>

    <logger name="com.netflix">
        <level value="warn"/>
    </logger>

并在您的课程中使用 Logger.getLogger(Class)。

于 2013-11-01T06:07:44.310 回答
2

这对我有用(风暴版本 0.9.0.1):

TopologyBuilder builder = new TopologyBuilder();
builder.setSpout(..);
builder.setBolt(..);
:

Config conf = new Config();
conf.put(Config.TOPOLOGY_DEBUG, false);

LocalCluster cluster = new LocalCluster();
cluster.submitTopology("topologyName", conf, builder.createTopology());
于 2014-07-21T07:59:33.217 回答
2

我在尝试使用本地测试环境评估 Storm 时发现了这个问题。我根据storm-coreversion创建了一个项目1.1.0,这是撰写本文时最新的稳定版本,所以我不知道这是否适用于其他任何人。

检查 Maven 依赖项并展开内容,storm-core-1.1.0.jar发现库的 log4j 日志依赖项的配置文件被调用log4j2.xml。意识到日志记录机制是 log4j 2,我在这里查阅了文档:https ://logging.apache.org/log4j/2.x/manual/index.html我在下面创建了一个新log4j2.xml文件src/main/resources(我的项目是 Maven-已配置,因此它位于类路径根目录中)。我首先复制现有文件的内容,并将指定记录器的日志级别更改为“OFF”:

<?xml version="1.0" encoding="UTF-8"?>
    <configuration monitorInterval="60">
      <Appenders>
        <Console name="Console" target="SYSTEM_OUT">
          <PatternLayout pattern="%-4r [%t] %-5p %c{1.} - %msg%n"/>
        </Console>
      </Appenders>
    <Loggers>
       <Logger name="org.apache.zookeeper" level="OFF"/>
         <Root level="OFF">
           <AppenderRef ref="Console"/>
         </Root>
    </Loggers>
</configuration>

运行“hello world”示例,无论 的设置如何,都conf.debug()表明 - 由于现在根本没有可能记录日志的机制 - 日志(最有用的是 System.out)现在完全静默,除了调用System.out.println()我放入了我的测试喷口/螺栓。这正是我想要的!希望这可以帮助我以外的人!

于 2017-07-20T14:02:38.317 回答
0

关于动态设置日志级别有一个很好的文档。它可以通过 UI 以及使用 CLI 来完成。后者在我看来更好。启动拓扑后,您可以简单地使用以下命令(从 Storm 的安装目录中):

    ./bin/storm set_log_level [topology name] -l [logger name]=[LEVEL]:[TIMEOUT]

有关更多详细信息,请查看此链接

于 2017-02-06T11:46:29.823 回答
0

在 src/main/resources(Maven 项目)中创建一个文件“log4j2.xml”对我有用!

<Loggers>
    <Logger name="org.apache.storm" level="OFF"/>
    <Logger name="org.apache.zookeeper" level="OFF"/>
    <Root level="OFF">
        <AppenderRef ref="Console"/>
    </Root>
</Loggers>

于 2017-12-20T10:40:12.790 回答