2015-04-13 36 views
6

Mam topologię burzy i chciałbym zarejestrować pewne zdarzenia, które występują w topologii, w oddzielnym pliku dziennika. Próbuję utworzyć niestandardowego appendera w pliku storm/logback/cluster.xml, który będzie używany do rejestrowania tych zdarzeń. Oto moja cluster.xml fragment, który jest ustawienie wszystkiego:Niestandardowa aplikacja zgłaszająca logi Storm dla topologii

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

Używam podstawowy WordCountTopology po prostu przetestować przykład. Oto fragment kodu, w którym staram się pisać do pliku dziennika

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")); 
    } 
} 

Bez względu na to, co robię, nie wydaje się uzyskać te dzienniki, aby pokazać się w niestandardowych rejestratora CL-log. plik dziennika. Czy jest to możliwe nawet w Storm, aby logować określone zdarzenia do określonego pliku za pomocą funkcji logback? Każda pomoc będzie doceniona.

Odpowiedz

4

Tylko dla kompletności, dostałem to do pracy. Wdrażałem swoje topologie lokalnie i dlatego rejestracja nie nastąpiła. Po wdrożeniu moich topologii w klastrze powyższa funkcjonalność rejestrowania zaczęła działać.

+0

Czy wiesz, jak skonfigurować rejestrowanie w trybie lokalnym? –

+0

w jaki sposób oddzieliłeś logi systemowe od dzienników topologii? – Mani

+1

@Mani Tworząc aplikację nadrzędną, kontrolujesz dokładnie to, co logujesz, tworząc prywatny statyczny końcowy org.slf4j.Logger CUSTOM_LOGGER = LoggerFactory.getLogger ("custom-logger"); – medium