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;
      }
    }
  • 相关阅读:
    使用Anaconda安装TensorFlow
    更新pip源/anaconda源
    PHP 中 config.m4 的探索
    有趣的智力题
    工作中MySql的了解到的小技巧
    一篇关于PHP性能的文章
    eslasticsearch操作集锦
    curl 命令详解~~
    Nginx 调优经验记录
    Elasticsearch安装使用
  • 原文地址:https://www.cnblogs.com/mengyao/p/4907103.html
Copyright © 2011-2022 走看看