我想关闭从本地群集运行时默认提供的日志记录功能。 目前它在控制台上记录了很多信息。
以下是log:
的示例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&amp; 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 :-(
答案 0 :(得分:11)
风暴真的很健谈并且讲述了很多信息但是如果你想让它保持沉默,你可以将Config.TOPOLOGY_DEBUG设置为假。
当您将Config.TOPOLOGY_DEBUG设置为true时,每次从任何喷口或螺栓发出元组时,您都会告诉Storm记录消息。
答案 1 :(得分: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)。
答案 2 :(得分: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());
答案 3 :(得分:2)
我在尝试使用本地测试环境评估Storm时发现了这个问题。我根据storm-core
版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 -configured,所以这是在classpath根目录。我开始复制现有文件的内容,并将指定记录器的日志级别更改为&#34; OFF&#34;:
<?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>
运行&#34; hello world&#34;例如,无论conf.debug()
的设置如何,都表示 - 因为现在根本没有可以记录日志的机制 - 日志(最有用的是System.out)现在已经无声,除了System.out.println()
的调用我放在我的测试喷口/螺栓中。这正是我想要的!希望这对我以外的其他人有帮助!
答案 4 :(得分:0)
有一个关于动态设置日志级别的很好的文档。它可以通过UI以及使用CLI完成。后者看起来对我好。启动拓扑后,您只需使用以下命令(来自Storm&#39的安装目录):
./bin/storm set_log_level [topology name] -l [logger name]=[LEVEL]:[TIMEOUT]
有关详细信息,请查看this link
答案 5 :(得分:0)
创建文件&#34; log4j2.xml&#34;在src / main / resources(Maven项目)中为我工作!
<Loggers>
<Logger name="org.apache.storm" level="OFF"/>
<Logger name="org.apache.zookeeper" level="OFF"/>
<Root level="OFF">
<AppenderRef ref="Console"/>
</Root>
</Loggers>