• 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;
      }
    }
  • 相关阅读:
    PHP数组的升序降序函数
    overflow样式修改插件——jscrollpane
    li标签之间的空隙问题(转)
    纯CSS制作三角(转)
    图片放大插件——elevatezoom
    git常用命令笔记
    求数组子序列和最大值
    Vim快速入门
    C++求两个整数的最大公约数和最小公倍数
    实验楼-4-Linux文件权限
  • 原文地址:https://www.cnblogs.com/mengyao/p/4907103.html
Copyright © 2020-2023  润新知