diff --git a/src/main/java/org/apache/sysds/hops/codegen/SpoofCompiler.java b/src/main/java/org/apache/sysds/hops/codegen/SpoofCompiler.java
index b3b0e32..6f107d7 100644
--- a/src/main/java/org/apache/sysds/hops/codegen/SpoofCompiler.java
+++ b/src/main/java/org/apache/sysds/hops/codegen/SpoofCompiler.java
@@ -105,7 +105,6 @@
 	private static final Log LOG = LogFactory.getLog(SpoofCompiler.class.getName());
 	
 	//internal configuration flags
-	public static final boolean LDEBUG                 = false;
 	public static CompilerType JAVA_COMPILER           = CompilerType.JANINO; 
 	public static PlanSelector PLAN_SEL_POLICY         = PlanSelector.FUSE_COST_BASED_V2; 
 	public static final IntegrationType INTEGRATION    = IntegrationType.RUNTIME;
@@ -158,14 +157,6 @@
 		EXACT_STATIC_BUFF,   //min number of live vector intermediates, assuming static array ring buffer
 	}
 	
-	static {
-		// for internal debugging only
-		if( LDEBUG ) {
-			Logger.getLogger("org.apache.sysds.hops.codegen")
-				.setLevel(Level.TRACE);
-		}
-	}
-	
 	//plan cache for cplan->compiled source to avoid unnecessary codegen/source code compile
 	//for equal operators from (1) different hop dags and (2) repeated recompilation 
 	//note: if PLAN_CACHE_SIZE is exceeded, we evict the least-recently-used plan (LRU policy)
diff --git a/src/main/java/org/apache/sysds/hops/cost/CostEstimationWrapper.java b/src/main/java/org/apache/sysds/hops/cost/CostEstimationWrapper.java
index bde4479..8aee81a 100644
--- a/src/main/java/org/apache/sysds/hops/cost/CostEstimationWrapper.java
+++ b/src/main/java/org/apache/sysds/hops/cost/CostEstimationWrapper.java
@@ -40,7 +40,6 @@
 		STATIC // based on FLOPS, read/write, etc, [time in sec]
 	}
 	
-	private static final boolean LDEBUG = false; //internal local debug level
 	private static final Log LOG = LogFactory.getLog(CostEstimationWrapper.class.getName());
 	private static final CostType DEFAULT_COSTTYPE = CostType.STATIC;
 	
@@ -49,12 +48,7 @@
 	
 	static 
 	{
-		// for internal debugging only
-		if( LDEBUG ) {
-			Logger.getLogger("org.apache.sysds.hops.cost")
-				.setLevel(Level.DEBUG);
-		}
-		
+
 		//create cost estimator
 		try
 		{
diff --git a/src/main/java/org/apache/sysds/hops/ipa/InterProceduralAnalysis.java b/src/main/java/org/apache/sysds/hops/ipa/InterProceduralAnalysis.java
index 272caec..abb8b81 100644
--- a/src/main/java/org/apache/sysds/hops/ipa/InterProceduralAnalysis.java
+++ b/src/main/java/org/apache/sysds/hops/ipa/InterProceduralAnalysis.java
@@ -21,8 +21,6 @@
 
 import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;
-import org.apache.log4j.Level;
-import org.apache.log4j.Logger;
 import org.apache.sysds.common.Types.DataType;
 import org.apache.sysds.common.Types.ValueType;
 import org.apache.sysds.conf.ConfigurationManager;
@@ -76,7 +74,6 @@
  */
 public class InterProceduralAnalysis 
 {
-	private static final boolean LDEBUG = false; //internal local debug level
 	private static final Log LOG = LogFactory.getLog(InterProceduralAnalysis.class.getName());
 
 	//internal configuration parameters
@@ -96,14 +93,6 @@
 	protected static final boolean FORWARD_SIMPLE_FUN_CALLS       = true; //replace a call to a simple forwarding function with the function itself
 	protected static final boolean FLAG_NONDETERMINISM            = true; //flag functions which directly or transitively contain non-deterministic calls
 	
-	static {
-		// for internal debugging only
-		if( LDEBUG ) {
-			Logger.getLogger("org.apache.sysds.hops.ipa")
-				.setLevel(Level.DEBUG);
-		}
-	}
-	
 	private final DMLProgram _prog;
 	private final StatementBlock _sb;
 	
diff --git a/src/main/java/org/apache/sysds/hops/rewrite/ProgramRewriter.java b/src/main/java/org/apache/sysds/hops/rewrite/ProgramRewriter.java
index 29daa63..f568c9d 100644
--- a/src/main/java/org/apache/sysds/hops/rewrite/ProgramRewriter.java
+++ b/src/main/java/org/apache/sysds/hops/rewrite/ProgramRewriter.java
@@ -50,21 +50,11 @@
  */
 public class ProgramRewriter
 {
-	//internal local debug level
-	private static final boolean LDEBUG = false;
 	private static final boolean CHECK = false;
 	
 	private ArrayList<HopRewriteRule> _dagRuleSet = null;
 	private ArrayList<StatementBlockRewriteRule> _sbRuleSet = null;
-	
-	static {
-		// for internal debugging only
-		if( LDEBUG ) {
-			Logger.getLogger("org.apache.sysds.hops.rewrite")
-				  .setLevel(Level.DEBUG);
-		}
-	}
-	
+
 	public ProgramRewriter() {
 		// by default which is used during initial compile 
 		// apply all (static and dynamic) rewrites
diff --git a/src/main/java/org/apache/sysds/hops/rewrite/RewriteMatrixMultChainOptimization.java b/src/main/java/org/apache/sysds/hops/rewrite/RewriteMatrixMultChainOptimization.java
index 7ae06ca..145b76c 100644
--- a/src/main/java/org/apache/sysds/hops/rewrite/RewriteMatrixMultChainOptimization.java
+++ b/src/main/java/org/apache/sysds/hops/rewrite/RewriteMatrixMultChainOptimization.java
@@ -22,9 +22,6 @@
 import java.util.ArrayList;
 import java.util.Arrays;
 
-import org.apache.log4j.Level;
-import org.apache.log4j.Logger;
-
 import org.apache.sysds.hops.AggBinaryOp;
 import org.apache.sysds.hops.Hop;
 import org.apache.sysds.hops.HopsException;
@@ -42,15 +39,6 @@
  */
 public class RewriteMatrixMultChainOptimization extends HopRewriteRule
 {
-	private static final boolean LDEBUG = false;
-	
-	static {
-		// for internal debugging only
-		if( LDEBUG ) {
-			Logger.getLogger("org.apache.sysds.hops.rewrite.RewriteMatrixMultChainOptimization")
-				.setLevel(Level.TRACE);
-		}
-	}
 	
 	@Override
 	public ArrayList<Hop> rewriteHopDAGs(ArrayList<Hop> roots, ProgramRewriteStatus state) 
diff --git a/src/main/java/org/apache/sysds/parser/ParForStatementBlock.java b/src/main/java/org/apache/sysds/parser/ParForStatementBlock.java
index 7bd3793..b88d8c3 100644
--- a/src/main/java/org/apache/sysds/parser/ParForStatementBlock.java
+++ b/src/main/java/org/apache/sysds/parser/ParForStatementBlock.java
@@ -27,8 +27,6 @@
 import java.util.List;
 import java.util.stream.Collectors;
 
-import org.apache.log4j.Level;
-import org.apache.log4j.Logger;
 import org.apache.sysds.conf.ConfigurationManager;
 import org.apache.sysds.hops.Hop;
 import org.apache.sysds.hops.IndexingOp;
@@ -62,8 +60,6 @@
  */
 public class ParForStatementBlock extends ForStatementBlock 
 {
-	private static final boolean LDEBUG = false; //internal local debug level
-	
 	//external parameter names 
 	private static HashSet<String> _paramNames;
 	public static final String CHECK            = "check";       //run loop dependency analysis
@@ -144,12 +140,6 @@
 		if( USE_FN_CACHE ) {
 			_fncache = new HashMap<>();
 		}
-		
-		// for internal debugging only
-		if( LDEBUG ) {
-			Logger.getLogger("org.apache.sysds.parser.ParForStatementBlock")
-				.setLevel(Level.TRACE);
-		}
 	}
 	
 	public ParForStatementBlock() {
@@ -340,7 +330,7 @@
 		for( ResultVar var : tmp )
 			if(_vsParent.containsVariable(var._name))
 				addToResultVariablesNoDup(var);
-		if( LDEBUG )
+		if( LOG.isDebugEnabled() )
 			for( ResultVar rvar : _resultVars )
 				LOG.debug("INFO: PARFOR final result variable: "+rvar._name);
 		
diff --git a/src/main/java/org/apache/sysds/runtime/compress/CompressedMatrixBlockFactory.java b/src/main/java/org/apache/sysds/runtime/compress/CompressedMatrixBlockFactory.java
index fdac0d3..77e94bc 100644
--- a/src/main/java/org/apache/sysds/runtime/compress/CompressedMatrixBlockFactory.java
+++ b/src/main/java/org/apache/sysds/runtime/compress/CompressedMatrixBlockFactory.java
@@ -26,8 +26,6 @@
 
 import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;
-import org.apache.log4j.Level;
-import org.apache.log4j.Logger;
 import org.apache.sysds.runtime.DMLRuntimeException;
 import org.apache.sysds.runtime.compress.cocode.PlanningCoCoder;
 import org.apache.sysds.runtime.compress.colgroup.ColGroup;
@@ -47,18 +45,6 @@
  * Factory pattern to construct a CompressedMatrixBlock.
  */
 public class CompressedMatrixBlockFactory {
-	// local debug flag
-	private static final boolean LOCAL_DEBUG = false;
-
-	// DEBUG/TRACE for details
-	private static final Level LOCAL_DEBUG_LEVEL = Level.DEBUG;
-
-	static {
-		// for internal debugging only
-		if(LOCAL_DEBUG) {
-			Logger.getLogger("org.apache.sysds.runtime.compress").setLevel(LOCAL_DEBUG_LEVEL);
-		}
-	}
 
 	private static final Log LOG = LogFactory.getLog(CompressedMatrixBlockFactory.class.getName());
 	private static final CompressionSettings defaultCompressionSettings = new CompressionSettingsBuilder().create();
diff --git a/src/main/java/org/apache/sysds/runtime/compress/colgroup/ColGroupSizes.java b/src/main/java/org/apache/sysds/runtime/compress/colgroup/ColGroupSizes.java
index 8809340..0777e12 100644
--- a/src/main/java/org/apache/sysds/runtime/compress/colgroup/ColGroupSizes.java
+++ b/src/main/java/org/apache/sysds/runtime/compress/colgroup/ColGroupSizes.java
@@ -22,30 +22,13 @@
 import org.apache.commons.lang.NotImplementedException;
 import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;
-import org.apache.log4j.Level;
-import org.apache.log4j.Logger;
 import org.apache.sysds.runtime.compress.BitmapEncoder;
 import org.apache.sysds.runtime.matrix.data.MatrixBlock;
 import org.apache.sysds.utils.MemoryEstimates;
 
 public class ColGroupSizes {
-	// ------------------------------
-	// Logging parameters:
-	// local debug flag
-	private static final boolean LOCAL_DEBUG = false;
-	// DEBUG/TRACE for details
-	private static final Level LOCAL_DEBUG_LEVEL = Level.DEBUG;
-
 	protected static final Log LOG = LogFactory.getLog(ColGroupSizes.class.getName());
 
-	static {
-		// for internal debugging only
-		if(LOCAL_DEBUG) {
-			Logger.getLogger("org.apache.sysds.runtime.compress.colgroup").setLevel(LOCAL_DEBUG_LEVEL);
-		}
-	}
-	// ------------------------------
-
 	public static long getEmptyMemoryFootprint(Class<?> colGroupClass) {
 		switch(colGroupClass.getSimpleName()) {
 			case "ColGroup":
diff --git a/src/main/java/org/apache/sysds/runtime/compress/estim/CompressedSizeEstimationFactors.java b/src/main/java/org/apache/sysds/runtime/compress/estim/CompressedSizeEstimationFactors.java
index 52e69d7..7263a12 100644
--- a/src/main/java/org/apache/sysds/runtime/compress/estim/CompressedSizeEstimationFactors.java
+++ b/src/main/java/org/apache/sysds/runtime/compress/estim/CompressedSizeEstimationFactors.java
@@ -24,7 +24,6 @@
 
 import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;
-import org.apache.log4j.Logger;
 import org.apache.sysds.runtime.compress.BitmapEncoder;
 import org.apache.sysds.runtime.compress.UncompressedBitmap;
 
@@ -33,11 +32,6 @@
  * into given CompressionFormats
  */
 public class CompressedSizeEstimationFactors implements Comparable<CompressedSizeEstimationFactors> {
-	static {
-		// Set to avoid constructing multiple main loggers.
-		Logger.getLogger("org.apache.sysds.runtime.compress.estim");
-	}
-
 	protected static final Log LOG = LogFactory.getLog(CompressedSizeEstimationFactors.class.getName());
 
 	protected final int numCols; // Number of columns in the compressed group
diff --git a/src/main/java/org/apache/sysds/runtime/compress/estim/CompressedSizeEstimator.java b/src/main/java/org/apache/sysds/runtime/compress/estim/CompressedSizeEstimator.java
index 9f71f0d..842a890 100644
--- a/src/main/java/org/apache/sysds/runtime/compress/estim/CompressedSizeEstimator.java
+++ b/src/main/java/org/apache/sysds/runtime/compress/estim/CompressedSizeEstimator.java
@@ -30,8 +30,6 @@
 
 import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;
-import org.apache.log4j.Level;
-import org.apache.log4j.Logger;
 import org.apache.sysds.runtime.DMLRuntimeException;
 import org.apache.sysds.runtime.compress.CompressionSettings;
 import org.apache.sysds.runtime.compress.UncompressedBitmap;
@@ -43,14 +41,6 @@
  * Main abstract class for estimating size of compressions on columns.
  */
 public abstract class CompressedSizeEstimator {
-
-	private static final boolean LOCAL_DEBUG = false;
-	private static final Level LOCAL_DEBUG_LEVEL = Level.DEBUG;
-	static {
-		if(LOCAL_DEBUG) {
-			Logger.getLogger("org.apache.sysds.runtime.compress.estim").setLevel(LOCAL_DEBUG_LEVEL);
-		}
-	}
 	protected static final Log LOG = LogFactory.getLog(CompressedSizeEstimator.class.getName());
 
 	/** The Matrix Block to extract the compression estimates from */
diff --git a/src/main/java/org/apache/sysds/runtime/controlprogram/ParForProgramBlock.java b/src/main/java/org/apache/sysds/runtime/controlprogram/ParForProgramBlock.java
index a92a7ee..9e15139 100644
--- a/src/main/java/org/apache/sysds/runtime/controlprogram/ParForProgramBlock.java
+++ b/src/main/java/org/apache/sysds/runtime/controlprogram/ParForProgramBlock.java
@@ -572,7 +572,7 @@
 		//OPTIMIZATION of ParFOR body (incl all child parfor PBs)
 		///////
 		if( _optMode != POptMode.NONE ) {
-			OptimizationWrapper.setLogLevel(_optLogLevel); //set optimizer log level
+			// OptimizationWrapper.setLogLevel(_optLogLevel); //set optimizer log level
 			OptimizationWrapper.optimize(_optMode, sb, this, ec, _monitor); //core optimize
 		}
 		
diff --git a/src/main/java/org/apache/sysds/runtime/controlprogram/context/SparkExecutionContext.java b/src/main/java/org/apache/sysds/runtime/controlprogram/context/SparkExecutionContext.java
index 510113c..bb6a94d 100644
--- a/src/main/java/org/apache/sysds/runtime/controlprogram/context/SparkExecutionContext.java
+++ b/src/main/java/org/apache/sysds/runtime/controlprogram/context/SparkExecutionContext.java
@@ -22,8 +22,6 @@
 import org.apache.commons.lang3.ArrayUtils;
 import org.apache.hadoop.io.LongWritable;
 import org.apache.hadoop.io.Text;
-import org.apache.log4j.Level;
-import org.apache.log4j.Logger;
 import org.apache.spark.SparkConf;
 import org.apache.spark.api.java.JavaPairRDD;
 import org.apache.spark.api.java.JavaSparkContext;
@@ -94,7 +92,6 @@
 
 public class SparkExecutionContext extends ExecutionContext
 {
-	private static final boolean LDEBUG = false; //local debug flag
 
 	//internal configurations
 	private static final boolean LAZY_SPARKCTX_CREATION = true;
@@ -117,14 +114,6 @@
 	private static boolean[] _poolBuff = FAIR_SCHEDULER_MODE ?
 		new boolean[InfrastructureAnalyzer.getLocalParallelism()] : null;
 	
-	static {
-		// for internal debugging only
-		if( LDEBUG ) {
-			Logger.getLogger("org.apache.sysds.runtime.controlprogram.context")
-				.setLevel(Level.DEBUG);
-		}
-	}
-
 	protected SparkExecutionContext(boolean allocateVars, boolean allocateLineage, Program prog) {
 		//protected constructor to force use of ExecutionContextFactory
 		super( allocateVars, allocateLineage, prog );
diff --git a/src/main/java/org/apache/sysds/runtime/controlprogram/parfor/opt/OptimizationWrapper.java b/src/main/java/org/apache/sysds/runtime/controlprogram/parfor/opt/OptimizationWrapper.java
index bf0b514..a329f9c 100644
--- a/src/main/java/org/apache/sysds/runtime/controlprogram/parfor/opt/OptimizationWrapper.java
+++ b/src/main/java/org/apache/sysds/runtime/controlprogram/parfor/opt/OptimizationWrapper.java
@@ -25,8 +25,6 @@
 
 import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;
-import org.apache.log4j.Level;
-import org.apache.log4j.Logger;
 import org.apache.sysds.api.DMLScript;
 import org.apache.sysds.conf.ConfigurationManager;
 import org.apache.sysds.hops.OptimizerUtils;
@@ -71,18 +69,13 @@
  */
 public class OptimizationWrapper 
 {
-	private static final boolean LDEBUG = false; //internal local debug level
 	private static final Log LOG = LogFactory.getLog(OptimizationWrapper.class.getName());
 	
 	//internal parameters
 	public static final double PAR_FACTOR_INFRASTRUCTURE = 1.0;
 	private static final boolean CHECK_PLAN_CORRECTNESS = false;
 
-	static {
-		if( LDEBUG )
-			setLogLevel(Level.DEBUG);
-	}
-	
+
 	/**
 	 * Called once per top-level parfor (during runtime, on parfor execute)
 	 * in order to optimize the specific parfor program block.
@@ -117,10 +110,10 @@
 			StatisticMonitor.putPFStat( pb.getID() , Stat.OPT_T, timeVal);
 	}
 
-	public static void setLogLevel( Level optLogLevel ) {
-		Logger.getLogger("org.apache.sysds.runtime.controlprogram.parfor.opt")
-				.setLevel( optLogLevel );
-	}
+	// public static void setLogLevel( Level optLogLevel ) {
+	// 	Logger.getLogger("org.apache.sysds.runtime.controlprogram.parfor.opt")
+	// 			.setLevel( optLogLevel );
+	// }
 
 	@SuppressWarnings("unused")
 	private static void optimize( POptMode otype, int ck, double cm, ParForStatementBlock sb, ParForProgramBlock pb, ExecutionContext ec, boolean monitor ) 
diff --git a/src/main/java/org/apache/sysds/runtime/lineage/LineageRewriteReuse.java b/src/main/java/org/apache/sysds/runtime/lineage/LineageRewriteReuse.java
index c1a7cd6..ddd8abe 100644
--- a/src/main/java/org/apache/sysds/runtime/lineage/LineageRewriteReuse.java
+++ b/src/main/java/org/apache/sysds/runtime/lineage/LineageRewriteReuse.java
@@ -76,15 +76,6 @@
 	private static boolean _disableReuse = true;
 	private static final Log LOG = LogFactory.getLog(LineageRewriteReuse.class.getName());
 	
-	private static boolean LDEBUG = false; //internal debugging
-	
-	static {
-		if( LDEBUG ) {
-			Logger.getLogger("org.apache.sysds.runtime.lineage.LineageRewriteReuse")
-				.setLevel(Level.DEBUG);
-		}
-	}
-	
 	public static boolean executeRewrites (Instruction curr, ExecutionContext ec)
 	{
 		ExecutionContext lrwec = getExecutionContext();
diff --git a/src/main/java/org/apache/sysds/runtime/matrix/data/LibMatrixCUDA.java b/src/main/java/org/apache/sysds/runtime/matrix/data/LibMatrixCUDA.java
index 40caacf..95af608 100644
--- a/src/main/java/org/apache/sysds/runtime/matrix/data/LibMatrixCUDA.java
+++ b/src/main/java/org/apache/sysds/runtime/matrix/data/LibMatrixCUDA.java
@@ -102,17 +102,8 @@
  * @see GPUObject
  */
 public class LibMatrixCUDA {
-	// local flag for debug output
-	private static final boolean LTRACE = false;
 	private static final Log LOG = LogFactory.getLog(LibMatrixCUDA.class.getName());
 
-	static {
-		// for internal debugging only
-		if( LTRACE ) {
-			Logger.getLogger("org.apache.sysds.runtime.matrix.data.LibMatrixCUDA").setLevel(Level.TRACE);
-		}
-	}
-
 	protected static int CUDNN_DATA_TYPE = jcuda.jcudnn.cudnnDataType.CUDNN_DATA_DOUBLE;
 	// The below variables are used in CSRPointer, GPUObjects, etc.
 	public static CudaSupportFunctions cudaSupportFunctions = new DoublePrecisionCudaSupportFunctions();
diff --git a/src/main/java/org/apache/sysds/runtime/matrix/data/LibMatrixCountDistinct.java b/src/main/java/org/apache/sysds/runtime/matrix/data/LibMatrixCountDistinct.java
index 73e89e8..474c323 100644
--- a/src/main/java/org/apache/sysds/runtime/matrix/data/LibMatrixCountDistinct.java
+++ b/src/main/java/org/apache/sysds/runtime/matrix/data/LibMatrixCountDistinct.java
@@ -41,24 +41,8 @@
  * This class contains various methods for counting the number of distinct values inside a MatrixBlock
  */
 public class LibMatrixCountDistinct {
-
-	// ------------------------------
-	// Logging parameters:
-	// local debug flag
-	private static final boolean LOCAL_DEBUG = false;
-	// DEBUG/TRACE for details
-	private static final Level LOCAL_DEBUG_LEVEL = Level.DEBUG;
-
 	private static final Log LOG = LogFactory.getLog(LibMatrixCountDistinct.class.getName());
 
-	static {
-		// for internal debugging only
-		if(LOCAL_DEBUG) {
-			Logger.getLogger("org.apache.sysds.runtime.matrix.data.LibMatrixCountDistinct").setLevel(LOCAL_DEBUG_LEVEL);
-		}
-	}
-	// ------------------------------
-
 	/**
 	 * The minimum number NonZero of cells in the input before using approximate techniques for counting number of
 	 * distinct values.
diff --git a/src/main/java/org/apache/sysds/utils/NativeHelper.java b/src/main/java/org/apache/sysds/utils/NativeHelper.java
index 7d3578a..25510c7 100644
--- a/src/main/java/org/apache/sysds/utils/NativeHelper.java
+++ b/src/main/java/org/apache/sysds/utils/NativeHelper.java
@@ -61,17 +61,8 @@
 	private static int maxNumThreads = -1;
 	private static boolean setMaxNumThreads = false;
 
-	// local flag for debug output
-	private static final boolean LTRACE = false;
 	private static final Log LOG = LogFactory.getLog(NativeHelper.class.getName());
 
-	static {
-		// for internal debugging only
-		if( LTRACE ) {
-			Logger.getLogger(NativeHelper.class.getName()).setLevel(Level.TRACE);
-		}
-	}
-
 	/**
 	 * Called by Statistics to print the loaded BLAS.
 	 * 
