Project: Flume-Hive
/**
 * Licensed to Cloudera, Inc. under one 
 * or more contributor license agreements.  See the NOTICE file 
 * distributed with this work for additional information 
 * regarding copyright ownership.  Cloudera, Inc. licenses this file 
 * to you under the Apache License, Version 2.0 (the 
 * "License"); you may not use this file except in compliance 
 * with the License.  You may obtain a copy of the License at 
 * 
 *     http://www.apache.org/licenses/LICENSE-2.0 
 * 
 * Unless required by applicable law or agreed to in writing, software 
 * distributed under the License is distributed on an "AS IS" BASIS, 
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 
 * See the License for the specific language governing permissions and 
 * limitations under the License. 
 */
package com.cloudera.flume.handlers.log4j; 
 
import org.apache.log4j.Logger; 
import org.apache.log4j.PropertyConfigurator; 
 
/**
 * This test program generates a specified number of logs using a specified 
 * log4j properties configuration file. This is useful for testing properties 
 * files and for doing performance tests. 
 *  
 */
 
public class Log4JInjector { 
  public static void usage() { 
    System.out 
        .println("need to specify <log4jprop file> <# of messages> message"); 
  } 
 
  public static void main(String argv[]) { 
    // String curDir = System.getProperty("user.dir"); 
    // System.out.println("pwd == " + curDir); 
 
    if (argv.length < 2) { 
      usage(); 
      System.exit(-1); 
    } 
 
    boolean endless = false
    boolean randsleep = false
    long sleep = 0
    String props = null
    long iters = 100
    StringBuffer b = new StringBuffer(); 
    for (int j = 0; j < argv.length; j++) { 
 
      // handle options 
      if ("-endless".equals(argv[j])) { 
        endless = true
        continue
      } 
 
      if ("-sleep".equals(argv[j])) { 
        j++; 
        sleep = Long.parseLong(argv[j]); 
        continue
      } 
 
      if ("-randsleep".equals(argv[j])) { 
        randsleep = true
        continue
      } 
 
      // handle the rest. 
      props = argv[j]; 
      j++; 
      iters = Long.parseLong(argv[j]); 
      j++; 
 
      boolean first = true
      for (int i = j; i < argv.length; i++) { 
        if (!first) { 
          b.append(' '); 
        } 
 
        b.append(argv[i]); 
        first = false
      } 
      break
    } 
    PropertyConfigurator.configure(props); 
    Logger logger = Logger.getLogger(Log4JInjector.class); 
 
    // send test for specified number of iterations. 
    for (long l = 0; l < iters || endless; l++) { 
      try { 
        long thisSleep = (long) ((double) sleep * (double) (randsleep ? Math 
            .random() : 1)); 
        Thread.sleep(thisSleep); 
      } catch (InterruptedException e) { 
        e.printStackTrace(); 
      } 
      logger.warn("" + l + " " + b); 
    } 
  } 
}