final LogTarget[] targets2 = new LogTarget[]{target2};
final Hierarchy hierarchy = new Hierarchy();
hierarchy.setDefaultLogTarget( target1 );
final Logger b = hierarchy.getLoggerFor( "b" );
final Logger bc = hierarchy.getLoggerFor( "b.c" );
final Logger bcd = hierarchy.getLoggerFor( "b.c.d" );
b.setLogTargets( targets1 );
b.debug( MSG );
assertEquals( "LogTarget inherit debug output", RMSG, getResult( output1 ) );
bc.debug( MSG );
assertEquals( "LogTarget inherit debug output", RMSG, getResult( output1 ) );
bcd.debug( MSG );
assertEquals( "LogTarget inherit debug output", RMSG, getResult( output1 ) );
b.setLogTargets( targets2 );
b.debug( MSG );
assertEquals( "LogTarget inherit debug output", R2MSG, getResult( output2 ) );
bc.debug( MSG );
assertEquals( "LogTarget inherit debug output", R2MSG, getResult( output2 ) );
bcd.debug( MSG );
assertEquals( "LogTarget inherit debug output", R2MSG, getResult( output2 ) );
bc.setLogTargets( targets1 );
b.debug( MSG );
assertEquals( "LogTarget inherit debug output", R2MSG, getResult( output2 ) );
bc.debug( MSG );
assertEquals( "LogTarget inherit debug output", RMSG, getResult( output1 ) );
bcd.debug( MSG );
assertEquals( "LogTarget inherit debug output", RMSG, getResult( output1 ) );
bcd.setLogTargets( targets2 );
b.debug( MSG );
assertEquals( "LogTarget inherit debug output", R2MSG, getResult( output2 ) );
bc.debug( MSG );
assertEquals( "LogTarget inherit debug output", RMSG, getResult( output1 ) );
bcd.debug( MSG );
assertEquals( "LogTarget inherit debug output", R2MSG, getResult( output2 ) );
bcd.unsetLogTargets();
b.debug( MSG );
assertEquals( "LogTarget inherit debug output", R2MSG, getResult( output2 ) );
bc.debug( MSG );
assertEquals( "LogTarget inherit debug output", RMSG, getResult( output1 ) );
bcd.debug( MSG );
assertEquals( "LogTarget inherit debug output", RMSG, getResult( output1 ) );
bc.unsetLogTargets();
b.debug( MSG );
assertEquals( "LogTarget inherit debug output", R2MSG, getResult( output2 ) );
bc.debug( MSG );
assertEquals( "LogTarget inherit debug output", R2MSG, getResult( output2 ) );
bcd.debug( MSG );
assertEquals( "LogTarget inherit debug output", R2MSG, getResult( output2 ) );
b.unsetLogTargets();
b.debug( MSG );
assertEquals( "LogTarget inherit debug output", RMSG, getResult( output1 ) );
bc.debug( MSG );
assertEquals( "LogTarget inherit debug output", RMSG, getResult( output1 ) );
bcd.debug( MSG );
assertEquals( "LogTarget inherit debug output", RMSG, getResult( output1 ) );
bc.setLogTargets( targets2 );
b.debug( MSG );
assertEquals( "LogTarget inherit debug output", RMSG, getResult( output1 ) );
bc.debug( MSG );
assertEquals( "LogTarget inherit debug output", R2MSG, getResult( output2 ) );
bcd.debug( MSG );
assertEquals( "LogTarget inherit debug output", R2MSG, getResult( output2 ) );
b.unsetLogTargets( true );
b.debug( MSG );
assertEquals( "LogTarget inherit debug output", RMSG, getResult( output1 ) );
bc.debug( MSG );
assertEquals( "LogTarget inherit debug output", RMSG, getResult( output1 ) );
bcd.debug( MSG );
assertEquals( "LogTarget inherit debug output", RMSG, getResult( output1 ) );
}