public static Object invokeStaticMethod( String typeString, String methodName, Object[] parameters, Class[] parameterTypes ) { Class type = loadClass( typeString ); return invokeStaticMethod( type, methodName, parameters, parameterTypes ); }
public static String setLog4jLevel( String logger, String level ) { // removing logj4 dependency // org.apache.log4j.Logger.getLogger( logger[ 0 ] ).setLevel( org.apache.log4j.Level.toLevel( logger[ 1 ] ) ); Object loggerObject = Util.invokeStaticMethod( "org.apache.log4j.Logger", "getLogger", new Object[]{logger}, new Class[]{String.class} ); Object levelObject = null; if( level != null ) levelObject = Util.invokeStaticMethod( "org.apache.log4j.Level", "toLevel", new Object[]{level}, new Class[]{String.class} ); Object oldLevel = Util.invokeInstanceMethod( loggerObject, "getLevel", new Object[]{}, new Class[]{} ); Util.invokeInstanceMethod( loggerObject, "setLevel", new Object[]{levelObject}, new Class[]{Util.loadClass( "org.apache.log4j.Level" )} ); if( oldLevel == null ) return null; return oldLevel.toString(); }
@Test public void testSetLogLevel() { Configuration jobConf = new Configuration(); jobConf.set( "log4j.logger", "cascading=DEBUG" ); HadoopUtil.initLog4j( jobConf ); Object loggerObject = Util.invokeStaticMethod( "org.apache.log4j.Logger", "getLogger", new Object[]{"cascading"}, new Class[]{String.class} ); Object levelObject = Util.invokeStaticMethod( "org.apache.log4j.Level", "toLevel", new Object[]{"DEBUG"}, new Class[]{String.class} ); Object returnedLevel = Util.invokeInstanceMethod( loggerObject, "getLevel", new Object[]{}, new Class[]{} ); assertEquals( levelObject, returnedLevel ); } }
@Test public void testSetLogLevel() { Configuration jobConf = new Configuration(); jobConf.set( "log4j.logger", "cascading=DEBUG" ); HadoopUtil.initLog4j( jobConf ); Object loggerObject = Util.invokeStaticMethod( "org.apache.log4j.Logger", "getLogger", new Object[]{"cascading"}, new Class[]{String.class} ); Object levelObject = Util.invokeStaticMethod( "org.apache.log4j.Level", "toLevel", new Object[]{"DEBUG"}, new Class[]{String.class} ); Object returnedLevel = Util.invokeInstanceMethod( loggerObject, "getLevel", new Object[]{}, new Class[]{} ); assertEquals( levelObject, returnedLevel ); } }