2015-04-13 15 views
6

Tôi có một cấu trúc liên kết bão và tôi muốn đăng nhập một số sự kiện xảy ra trong cấu trúc liên kết vào một tệp nhật ký riêng biệt. Tôi đang cố gắng để tạo một appender tùy chỉnh trong cơn bão/logback/cluster.xml sẽ được sử dụng để đăng nhập các sự kiện này. Dưới đây là đoạn cluster.xml của tôi được thiết lập mọi thứ:Tùy chỉnh logback appender cho 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> 

Tôi đang sử dụng WordCountTopology cơ bản để chỉ kiểm tra ví dụ. Đây là đoạn mã mà tôi đang cố gắng ghi vào tệp nhật ký

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

Không có vấn đề gì, tôi dường như không thể hiển thị nhật ký này trong nhật ký ghi nhật ký tùy chỉnh. tệp nhật ký. Điều này thậm chí có thể xảy ra trong Storm để ghi lại các sự kiện cụ thể vào một tệp cụ thể bằng cách sử dụng logback không? Bất kỳ trợ giúp sẽ được đánh giá cao.

Trả lời

4

Chỉ để hoàn thành, tôi đã làm việc này. Tôi đã triển khai các cấu trúc liên kết của mình cục bộ và do đó việc ghi nhật ký không xảy ra. Khi tôi triển khai cấu trúc liên kết của mình cho cụm, chức năng ghi nhật ký ở trên bắt đầu hoạt động.

+0

Bạn có biết cách định cấu hình đăng nhập ở chế độ cục bộ không? –

+0

cách bạn tách nhật ký hệ thống khỏi nhật ký cấu trúc liên kết của mình? – Mani

+1

@Mani Bằng cách tạo appender ở trên bạn kiểm soát chính xác những gì bạn đăng nhập bằng cách tạo ra private static final org.slf4j.Logger CUSTOM_LOGGER = LoggerFactory.getLogger ("custom-logger"); – medium

Các vấn đề liên quan