zoukankan      html  css  js  c++  java
  • Flume源码-LoggerSink

    package org.apache.flume.sink;
    
    import com.google.common.base.Strings;
    import org.apache.flume.Channel;
    import org.apache.flume.Context;
    import org.apache.flume.Event;
    import org.apache.flume.EventDeliveryException;
    import org.apache.flume.Transaction;
    import org.apache.flume.conf.Configurable;
    import org.apache.flume.event.EventHelper;
    import org.slf4j.Logger;
    import org.slf4j.LoggerFactory;
    
    public class LoggerSink extends AbstractSink implements Configurable {
    
      private static final Logger logger = LoggerFactory
          .getLogger(LoggerSink.class);
    
      // Default Max bytes to dump
      public static final int DEFAULT_MAX_BYTE_DUMP = 16;
    
      // Max number of bytes to be dumped
      private int maxBytesToLog = DEFAULT_MAX_BYTE_DUMP;
    
      public static final String MAX_BYTES_DUMP_KEY = "maxBytesToLog";
    
      @Override
      public void configure(Context context) {
        String strMaxBytes = context.getString(MAX_BYTES_DUMP_KEY);
        if (!Strings.isNullOrEmpty(strMaxBytes)) {
          try {
            maxBytesToLog = Integer.parseInt(strMaxBytes);
          } catch (NumberFormatException e) {
            logger.warn(String.format("Unable to convert %s to integer, using default value(%d) for maxByteToDump",
                    strMaxBytes, DEFAULT_MAX_BYTE_DUMP));
            maxBytesToLog = DEFAULT_MAX_BYTE_DUMP;
          }
        }
      }
    
      @Override
      public Status process() throws EventDeliveryException {
        Status result = Status.READY;
        Channel channel = getChannel();
        Transaction transaction = channel.getTransaction();
        Event event = null;
    
        try {
          transaction.begin();
          event = channel.take();
    
          if (event != null) {
            if (logger.isInfoEnabled()) {
              logger.info("Event: " + EventHelper.dumpEvent(event, maxBytesToLog));
            }
          } else {
            // No event found, request back-off semantics from the sink runner
            result = Status.BACKOFF;
          }
          transaction.commit();
        } catch (Exception ex) {
          transaction.rollback();
          throw new EventDeliveryException("Failed to log event: " + event, ex);
        } finally {
          transaction.close();
        }
    
        return result;
      }
    }
  • 相关阅读:
    Cocoa中对日期和时间的处理 NSCalendar (一)
    iOS优秀博客收录
    八大排序(内容是转载链接)
    IOS8定位无效问题
    ios 里如何判断当前应用的定位服务是否可用
    MKMapView和MKMapViewDelegate
    根据经纬度翻译成详细位置的各种方法
    iOS 根据经纬度反查 地名
    MapKit学习笔记
    解决Collection <__NSArrayM: 0xb550c30> was mutated while being enumerated
  • 原文地址:https://www.cnblogs.com/mengyao/p/4907103.html
Copyright © 2011-2022 走看看