如何从Storm中禁用/关闭日志记录function

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

以下是日志示例:

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 :-( 

Storm真的很健谈,并且告诉了很多信息但是如果你想让它静音,你可以将Config.TOPOLOGY_DEBUG设置为false。

当您将Config.TOPOLOGY_DEBUG设置为true时,每次从任何喷口或螺栓发出元组时,您都会告诉Storm记录消息。

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

          

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

这适用于我(风暴版本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()); 

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

检查Maven依赖项,并扩展storm-core-1.1.0.jar的内容,发现库的log4j日志记录依赖项的配置文件名为log4j2.xml 。 通过实现日志记录机制是log4j 2 ,我在这里查阅了文档: https : log4j2.xml我在src/main/resources下创建了一个新的log4j2.xml文件src/main/resources (我的项目是Maven配置的,所以这是在classpath根目录下)。 我开始复制现有文件的内容,并将指定记录器的日志级别更改为“OFF”:

               

运行一个“hello world”示例, 无论conf.debug()的设置如何都表明 – 因为现在根本没有可以记录日志的机制 – 日志(最有用的是System.out)现在已经无声,除了System.out.println()的调用,我把它放在我的测试喷口/螺栓中。 这正是我想要的! 希望这可以帮助除我之外的其他人!

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

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

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

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