2015-04-13 3 views
6

У меня есть топология шторма, и я хотел бы зарегистрировать определенные события, которые происходят в топологии, в отдельный файл журнала. Я пытаюсь создать пользовательский appender в storm/logback/cluster.xml, который будет использоваться для регистрации этих событий. Вот мой cluster.xml фрагмент кода, который устанавливает все вверх:Пользовательский регистратор ловушек для топологии

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

Я использую основной WordCountTopology просто проверить пример. Вот фрагмент кода, где я пытаюсь не писать в лог-файл

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

Независимо от того, что я делаю, я не могу показаться, чтобы получить эти журналы, чтобы показать в заказ регистратора CL-журнал. журнальный файл. Возможно ли даже в Storm регистрировать определенные события в определенном файле с помощью журнала? Любая помощь будет оценена по достоинству.

ответ

4

Просто для полноты, я получил это для работы. Я размещал свои топологии локально, и поэтому запись не происходила. После того, как я развернул свои топологии в кластере, работающие функции регистрации начали работать.

+0

Знаете ли вы, как настроить ведение журнала в локальном режиме? –

+0

Как вы отделили системные журналы от журналов топологии? – Mani

+1

@Mani Создавая приложение выше, вы точно контролируете то, что вы регистрируете, создавая приватный статический окончательный org.slf4j.Logger CUSTOM_LOGGER = LoggerFactory.getLogger («custom-logger»); – medium