Hi there -
I have a problem with my println and logger output not appearing any where
i can find it when I deploy a topology to my one node
cluster. I don't have this issue when i debug the topology in local mode.
In local mode i see all the output.
As a simple example I have modified the ExclamationTopology in the storm
starter project and tried to figure out where the output
was going. My modifications are shown below (in MODIFIED
ExclamationTopology section).
>>>>>>
So, my first question is:
where should i be looking for std out output, and my logger output ?
>>>>>>
I have looked in the following places:
1) the console where i launch the topology
2) the captured standard output of nimbus and supervisor processes (that
is /tmp/*.log), given the processes are launched as below:
$STORMDIR/bin/storm nimbus > /tmp/nimbus.log 2>&1 &
$STORMDIR/bin/storm supervisor > /tmp/supervisor.log 2>&1 &
3) All logfiles generated under $STORMDIR/logs/*
>>>>>>
My second question, is how is storm internal logger output being sent to
stdout in the first place ?
>>>>>>
I am seeing lots of logger output going to my console that looks like this:
9059 [Thread-18-count] INFO backtype.storm.daemon.task - Emitting:
count default [snow, 20]
However, when I look in $STORMDIR/logback/cluster.xml , I don't see
any appender configured that would go
to stdout...
I would assume that logback would require a config line like this:
<appender name="STDOUT"
class="ch.qos.logback.core.ConsoleAppender">
But I see no such line in cluster.xml
This leads me to believe that there is some additional mechanism to
configure logging that I don't understand.
Any leads much much appreciated !
thanks
Chris
MODIFIED ExclamationTopology
public class ExclamationTopology {
public static Logger LOG = LoggerFactory.getLogger(ExclamationTopology
.class);
public static class ExclamationBolt extends BaseRichBolt {
OutputCollector _collector;
@Override
public void prepare(Map conf, TopologyContext context, OutputCollector
collector) {
_collector = collector;
}
@Override
public void execute(Tuple tuple) {
System.out.println(">>>>tuple: " + tuple);
LOG.error(">>>>tuple: logger " + tuple);
_collector.emit(tuple, new Values(tuple.getString(0) + "!!!"));
_collector.ack(tuple);
}
@Override
public void declareOutputFields(OutputFieldsDeclarer declarer) {
declarer.declare(new Fields("word"));
}
}
public static void main(String[] args) throws Exception {
System.out.println(">>> STARING THE PROGRAM");
LOG.error(">>> -logger -- STARING THE PROGRAM");
TopologyBuilder builder = new TopologyBuilder();
etc. etc. the rest is the same as the 'stock version..
--
Chris Bedford
Founder & Lead Lackey
Build Lackey Labs: http://buildlackey.com
Go Grails!: http://blog.buildlackey.com