2015-04-13 9 views
6

Ho una topologia di tempesta e vorrei registrare determinati eventi che si verificano all'interno della topologia in un file di registro separato. Sto cercando di creare un appender personalizzato in storm/logback/cluster.xml che verrà utilizzato per registrare questi eventi. Ecco il mio frammento di cluster.xml che sta mettendo tutto in su:Appender di logback personalizzato per Topology

<appender name="A2" class="ch.qos.logback.core.rolling.RollingFileAppender"> 
    <file>${storm.home}/logs/custom-logger/cl-log.log</file> 
    <rollingPolicy class="ch.qos.logback.core.rolling.FixedWindowRollingPolicy"> 
     <fileNamePattern>${storm.home}/logs/${logfile.name}.%i</fileNamePattern> 
     <minIndex>1</minIndex> 
     <maxIndex>9</maxIndex> 
    </rollingPolicy> 

    <triggeringPolicy class="ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy"> 
     <maxFileSize>100MB</maxFileSize> 
    </triggeringPolicy> 

    <encoder> 
     <pattern>%d{yyyy-MM-dd_HH:mm:ss} %c{1} [%p] %m$n</pattern> 
    </encoder> 
</appender> 

<logger name="custom-logger" additivity="false"> 
    <level value="INFO" /> 
    <appender-ref ref="A2"/> 
</logger> 

Sto usando il WordCountTopology base per testare solo l'esempio. Ecco il frammento di codice in cui sto cercando di scrivere nel file di registro

public static class WordCount extends BaseBasicBolt { 

    private static final org.slf4j.Logger CUSTOM_LOGGER = 
      LoggerFactory.getLogger("custom-logger"); 
    Map<String, Integer> counts = new HashMap<String, Integer>(); 

    public void execute(Tuple tuple, BasicOutputCollector collector) { 
     String word = tuple.getString(0); 
     Integer count = counts.get(word); 
     if (count == null) 
     count = 0; 
     count++; 
     counts.put(word, count); 

     CUSTOM_LOGGER.info("Emitting word[" + word + "] count["+ count + "]"); 
     collector.emit(new Values(word, count)); 
    } 

    public void declareOutputFields(OutputFieldsDeclarer declarer) { 
     declarer.declare(new Fields("word", "count")); 
    } 
} 

Non importa quello che faccio, io non riesco a ottenere questi registri di presentarsi nel custom-logger cl-log. file di registro. E 'anche possibile all'interno di Storm registrare eventi specifici su un file specifico usando il logback? Qualsiasi aiuto sarebbe apprezzato.

risposta

4

Solo per completezza, l'ho fatto funzionare. Stavo distribuendo le mie topologie localmente e quindi la registrazione non si stava verificando. Una volta distribuite le mie topologie nel cluster, la funzionalità di registrazione in alto ha iniziato a funzionare.

+0

Sai come configurare la registrazione in modalità locale? –

+0

in che modo sono stati separati i log di sistema dai log di topologia? – Mani

+1

@Mani Creando l'appender in alto, controlli esattamente ciò che accedi creando il finale statico privato org.slf4j.Logger CUSTOM_LOGGER = LoggerFactory.getLogger ("custom-logger"); – medium