diff --git a/phoenix-hive-base/phoenix4-hive/src/main/java/org/apache/phoenix/compat/HiveCompatUtil.java b/phoenix-hive-base/phoenix4-hive/src/main/java/org/apache/phoenix/compat/HiveCompatUtil.java
index 71c4f8e..9838fdf 100644
--- a/phoenix-hive-base/phoenix4-hive/src/main/java/org/apache/phoenix/compat/HiveCompatUtil.java
+++ b/phoenix-hive-base/phoenix4-hive/src/main/java/org/apache/phoenix/compat/HiveCompatUtil.java
@@ -17,7 +17,7 @@
  */
 package org.apache.phoenix.compat;
 
-import org.apache.commons.logging.Log;
+import org.slf4j.Logger;
 import org.apache.hadoop.hive.conf.HiveConf;
 import org.apache.hadoop.hive.ql.QueryState;
 import org.apache.hadoop.hive.ql.io.AcidOutputFormat;
@@ -44,7 +44,7 @@
         return comparisonExpr;
     }
 
-    public static String getOptionsValue(AcidOutputFormat.Options options, AtomicReference<Method> GET_BUCKET_METHOD_REF, AtomicReference<Method> GET_BUCKET_ID_METHOD_REF, Log LOG) {
+    public static String getOptionsValue(AcidOutputFormat.Options options, AtomicReference<Method> GET_BUCKET_METHOD_REF, AtomicReference<Method> GET_BUCKET_ID_METHOD_REF, Logger LOG) {
         StringBuilder content = new StringBuilder();
 
         int bucket = options.getBucket();
diff --git a/phoenix-hive-base/phoenix4-hive/src/main/java/org/apache/phoenix/hive/objectinspector/AbstractPhoenixObjectInspector.java b/phoenix-hive-base/phoenix4-hive/src/main/java/org/apache/phoenix/hive/objectinspector/AbstractPhoenixObjectInspector.java
index 7e406cd..9bf4e07 100644
--- a/phoenix-hive-base/phoenix4-hive/src/main/java/org/apache/phoenix/hive/objectinspector/AbstractPhoenixObjectInspector.java
+++ b/phoenix-hive-base/phoenix4-hive/src/main/java/org/apache/phoenix/hive/objectinspector/AbstractPhoenixObjectInspector.java
@@ -17,8 +17,8 @@
  */
 package org.apache.phoenix.hive.objectinspector;
 
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 import org.apache.hadoop.hive.serde2.lazy.objectinspector.primitive.AbstractPrimitiveLazyObjectInspector;
 import org.apache.hadoop.hive.serde2.typeinfo.PrimitiveTypeInfo;
 import org.apache.hadoop.io.Writable;
@@ -29,18 +29,18 @@
 public abstract class AbstractPhoenixObjectInspector<T extends Writable>
         extends AbstractPrimitiveLazyObjectInspector<T> {
 
-    private final Log log;
+    private final Logger log;
 
     public AbstractPhoenixObjectInspector() {
         super();
 
-        log = LogFactory.getLog(getClass());
+        log = LoggerFactory.getLogger(getClass());
     }
 
     protected AbstractPhoenixObjectInspector(PrimitiveTypeInfo typeInfo) {
         super(typeInfo);
 
-        log = LogFactory.getLog(getClass());
+        log = LoggerFactory.getLogger(getClass());
     }
 
     @Override
diff --git a/phoenix-hive-base/phoenix5-hive/src/main/java/org/apache/phoenix/compat/HiveCompatUtil.java b/phoenix-hive-base/phoenix5-hive/src/main/java/org/apache/phoenix/compat/HiveCompatUtil.java
index 7dbb1bf..80108cf 100644
--- a/phoenix-hive-base/phoenix5-hive/src/main/java/org/apache/phoenix/compat/HiveCompatUtil.java
+++ b/phoenix-hive-base/phoenix5-hive/src/main/java/org/apache/phoenix/compat/HiveCompatUtil.java
@@ -17,7 +17,7 @@
  */
 package org.apache.phoenix.compat;
 
-import org.apache.commons.logging.Log;
+import org.slf4j.Logger;
 import org.apache.hadoop.hive.common.type.Date;
 import org.apache.hadoop.hive.common.type.Timestamp;
 import org.apache.hadoop.hive.conf.HiveConf;
@@ -64,7 +64,7 @@
         return ret;
     }
 
-    public static String getOptionsValue(AcidOutputFormat.Options options, AtomicReference<Method> GET_BUCKET_METHOD_REF, AtomicReference<Method> GET_BUCKET_ID_METHOD_REF, Log LOG) {
+    public static String getOptionsValue(AcidOutputFormat.Options options, AtomicReference<Method> GET_BUCKET_METHOD_REF, AtomicReference<Method> GET_BUCKET_ID_METHOD_REF, Logger LOG) {
         StringBuilder content = new StringBuilder();
 
         int bucket = getBucket(options, GET_BUCKET_METHOD_REF, GET_BUCKET_ID_METHOD_REF, LOG);
@@ -85,7 +85,7 @@
         return content.toString();
     }
 
-    private static int getBucket(AcidOutputFormat.Options options, AtomicReference<Method> GET_BUCKET_METHOD_REF, AtomicReference<Method> GET_BUCKET_ID_METHOD_REF, Log LOG) {
+    private static int getBucket(AcidOutputFormat.Options options, AtomicReference<Method> GET_BUCKET_METHOD_REF, AtomicReference<Method> GET_BUCKET_ID_METHOD_REF, Logger LOG) {
         Method getBucketMethod = GET_BUCKET_METHOD_REF.get();
         try {
             if (getBucketMethod == null) {
diff --git a/phoenix-hive-base/phoenix5-hive/src/main/java/org/apache/phoenix/hive/objectinspector/AbstractPhoenixObjectInspector.java b/phoenix-hive-base/phoenix5-hive/src/main/java/org/apache/phoenix/hive/objectinspector/AbstractPhoenixObjectInspector.java
index 7e406cd..9bf4e07 100644
--- a/phoenix-hive-base/phoenix5-hive/src/main/java/org/apache/phoenix/hive/objectinspector/AbstractPhoenixObjectInspector.java
+++ b/phoenix-hive-base/phoenix5-hive/src/main/java/org/apache/phoenix/hive/objectinspector/AbstractPhoenixObjectInspector.java
@@ -17,8 +17,8 @@
  */
 package org.apache.phoenix.hive.objectinspector;
 
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 import org.apache.hadoop.hive.serde2.lazy.objectinspector.primitive.AbstractPrimitiveLazyObjectInspector;
 import org.apache.hadoop.hive.serde2.typeinfo.PrimitiveTypeInfo;
 import org.apache.hadoop.io.Writable;
@@ -29,18 +29,18 @@
 public abstract class AbstractPhoenixObjectInspector<T extends Writable>
         extends AbstractPrimitiveLazyObjectInspector<T> {
 
-    private final Log log;
+    private final Logger log;
 
     public AbstractPhoenixObjectInspector() {
         super();
 
-        log = LogFactory.getLog(getClass());
+        log = LoggerFactory.getLogger(getClass());
     }
 
     protected AbstractPhoenixObjectInspector(PrimitiveTypeInfo typeInfo) {
         super(typeInfo);
 
-        log = LogFactory.getLog(getClass());
+        log = LoggerFactory.getLogger(getClass());
     }
 
     @Override
diff --git a/phoenix-hive-base/src/it/java/org/apache/phoenix/hive/BaseHivePhoenixStoreIT.java b/phoenix-hive-base/src/it/java/org/apache/phoenix/hive/BaseHivePhoenixStoreIT.java
index 15d8bb7..aa92c27 100644
--- a/phoenix-hive-base/src/it/java/org/apache/phoenix/hive/BaseHivePhoenixStoreIT.java
+++ b/phoenix-hive-base/src/it/java/org/apache/phoenix/hive/BaseHivePhoenixStoreIT.java
@@ -18,8 +18,8 @@
 package org.apache.phoenix.hive;
 
 import org.apache.commons.io.FileUtils;
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 import org.apache.hadoop.conf.Configuration;
 import org.apache.hadoop.fs.Path;
 import org.apache.hadoop.hbase.HBaseTestingUtility;
@@ -50,7 +50,7 @@
  */
 public class BaseHivePhoenixStoreIT extends BaseHBaseManagedTimeIT {
 
-    private static final Log LOG = LogFactory.getLog(BaseHivePhoenixStoreIT.class);
+    private static final Logger LOG = LoggerFactory.getLogger(BaseHivePhoenixStoreIT.class);
     protected static HBaseTestingUtility hbaseTestUtil;
     protected static MiniHBaseCluster hbaseCluster;
     private static String zkQuorum;
diff --git a/phoenix-hive-base/src/main/java/org/apache/phoenix/hive/PhoenixMetaHook.java b/phoenix-hive-base/src/main/java/org/apache/phoenix/hive/PhoenixMetaHook.java
index eb63fc7..92cffc4 100644
--- a/phoenix-hive-base/src/main/java/org/apache/phoenix/hive/PhoenixMetaHook.java
+++ b/phoenix-hive-base/src/main/java/org/apache/phoenix/hive/PhoenixMetaHook.java
@@ -18,8 +18,8 @@
 package org.apache.phoenix.hive;
 
 
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 import org.apache.hadoop.hive.metastore.HiveMetaHook;
 import org.apache.hadoop.hive.metastore.TableType;
 import org.apache.hadoop.hive.metastore.api.FieldSchema;
@@ -42,7 +42,7 @@
  */
 public class PhoenixMetaHook implements HiveMetaHook {
 
-    private static final Log LOG = LogFactory.getLog(PhoenixMetaHook.class);
+    private static final Logger LOG = LoggerFactory.getLogger(PhoenixMetaHook.class);
     private static final String EXTERNAL_TABLE_PURGE = "external.table.purge";
 
     @Override
diff --git a/phoenix-hive-base/src/main/java/org/apache/phoenix/hive/PhoenixRecordUpdater.java b/phoenix-hive-base/src/main/java/org/apache/phoenix/hive/PhoenixRecordUpdater.java
index 710f372..1a94a0c 100644
--- a/phoenix-hive-base/src/main/java/org/apache/phoenix/hive/PhoenixRecordUpdater.java
+++ b/phoenix-hive-base/src/main/java/org/apache/phoenix/hive/PhoenixRecordUpdater.java
@@ -23,8 +23,8 @@
 import java.sql.SQLException;
 import java.util.Properties;
 
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 import org.apache.hadoop.conf.Configuration;
 import org.apache.hadoop.fs.Path;
 import org.apache.hadoop.hive.ql.io.AcidOutputFormat;
@@ -46,7 +46,7 @@
 
 public class PhoenixRecordUpdater implements RecordUpdater {
 
-    private static final Log LOG = LogFactory.getLog(PhoenixRecordUpdater.class);
+    private static final Logger LOG = LoggerFactory.getLogger(PhoenixRecordUpdater.class);
 
     private final Connection conn;
     private final PreparedStatement pstmt;
diff --git a/phoenix-hive-base/src/main/java/org/apache/phoenix/hive/PhoenixSerDe.java b/phoenix-hive-base/src/main/java/org/apache/phoenix/hive/PhoenixSerDe.java
index 9b5083d..9324604 100644
--- a/phoenix-hive-base/src/main/java/org/apache/phoenix/hive/PhoenixSerDe.java
+++ b/phoenix-hive-base/src/main/java/org/apache/phoenix/hive/PhoenixSerDe.java
@@ -17,8 +17,8 @@
  */
 package org.apache.phoenix.hive;
 
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 import org.apache.hadoop.conf.Configuration;
 import org.apache.hadoop.hive.serde.serdeConstants;
 import org.apache.hadoop.hive.serde2.AbstractSerDe;
@@ -47,7 +47,7 @@
  */
 public class PhoenixSerDe extends AbstractSerDe {
 
-    public static final Log LOG = LogFactory.getLog(PhoenixSerDe.class);
+    private static final Logger LOG = LoggerFactory.getLogger(PhoenixSerDe.class);
 
     private PhoenixSerializer serializer;
     private ObjectInspector objectInspector;
diff --git a/phoenix-hive-base/src/main/java/org/apache/phoenix/hive/PhoenixSerializer.java b/phoenix-hive-base/src/main/java/org/apache/phoenix/hive/PhoenixSerializer.java
index 27e9052..7d6ede4 100644
--- a/phoenix-hive-base/src/main/java/org/apache/phoenix/hive/PhoenixSerializer.java
+++ b/phoenix-hive-base/src/main/java/org/apache/phoenix/hive/PhoenixSerializer.java
@@ -17,8 +17,8 @@
  */
 package org.apache.phoenix.hive;
 
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 import org.apache.hadoop.conf.Configuration;
 import org.apache.hadoop.hive.common.type.HiveChar;
 import org.apache.hadoop.hive.common.type.HiveDecimal;
@@ -51,7 +51,7 @@
  */
 public class PhoenixSerializer {
 
-    private static final Log LOG = LogFactory.getLog(PhoenixSerializer.class);
+    private static final Logger LOG = LoggerFactory.getLogger(PhoenixSerializer.class);
 
     public static enum DmlType {
         NONE,
diff --git a/phoenix-hive-base/src/main/java/org/apache/phoenix/hive/PhoenixStorageHandler.java b/phoenix-hive-base/src/main/java/org/apache/phoenix/hive/PhoenixStorageHandler.java
index 0f8ee93..57c58dd 100644
--- a/phoenix-hive-base/src/main/java/org/apache/phoenix/hive/PhoenixStorageHandler.java
+++ b/phoenix-hive-base/src/main/java/org/apache/phoenix/hive/PhoenixStorageHandler.java
@@ -17,8 +17,8 @@
  */
 package org.apache.phoenix.hive;
 
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 import org.apache.hadoop.conf.Configuration;
 import org.apache.hadoop.hbase.HBaseConfiguration;
 import org.apache.hadoop.hbase.HConstants;
@@ -76,7 +76,7 @@
         return hbaseConf;
     }
 
-    private static final Log LOG = LogFactory.getLog(PhoenixStorageHandler.class);
+    private static final Logger LOG = LoggerFactory.getLogger(PhoenixStorageHandler.class);
 
     public PhoenixStorageHandler() {
         if (LOG.isDebugEnabled()) {
diff --git a/phoenix-hive-base/src/main/java/org/apache/phoenix/hive/mapreduce/PhoenixInputFormat.java b/phoenix-hive-base/src/main/java/org/apache/phoenix/hive/mapreduce/PhoenixInputFormat.java
index 38e01fd..f04390a 100644
--- a/phoenix-hive-base/src/main/java/org/apache/phoenix/hive/mapreduce/PhoenixInputFormat.java
+++ b/phoenix-hive-base/src/main/java/org/apache/phoenix/hive/mapreduce/PhoenixInputFormat.java
@@ -24,8 +24,8 @@
 import java.util.Arrays;
 import java.util.List;
 import java.util.Properties;
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 import org.apache.hadoop.conf.Configuration;
 import org.apache.hadoop.fs.Path;
 import org.apache.hadoop.hbase.HConstants;
@@ -72,7 +72,7 @@
 public class PhoenixInputFormat<T extends DBWritable> implements InputFormat<WritableComparable,
         T> {
 
-    private static final Log LOG = LogFactory.getLog(PhoenixInputFormat.class);
+    private static final Logger LOG = LoggerFactory.getLogger(PhoenixInputFormat.class);
 
     public PhoenixInputFormat() {
         if (LOG.isDebugEnabled()) {
diff --git a/phoenix-hive-base/src/main/java/org/apache/phoenix/hive/mapreduce/PhoenixOutputFormat.java b/phoenix-hive-base/src/main/java/org/apache/phoenix/hive/mapreduce/PhoenixOutputFormat.java
index ed47176..bdda139 100644
--- a/phoenix-hive-base/src/main/java/org/apache/phoenix/hive/mapreduce/PhoenixOutputFormat.java
+++ b/phoenix-hive-base/src/main/java/org/apache/phoenix/hive/mapreduce/PhoenixOutputFormat.java
@@ -17,8 +17,8 @@
  */
 package org.apache.phoenix.hive.mapreduce;
 
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 import org.apache.hadoop.conf.Configuration;
 import org.apache.hadoop.fs.FileSystem;
 import org.apache.hadoop.fs.Path;
@@ -43,7 +43,7 @@
 public class PhoenixOutputFormat<T extends DBWritable> implements OutputFormat<NullWritable, T>,
         AcidOutputFormat<NullWritable, T> {
 
-    private static final Log LOG = LogFactory.getLog(PhoenixOutputFormat.class);
+    private static final Logger LOG = LoggerFactory.getLogger(PhoenixOutputFormat.class);
 
     public PhoenixOutputFormat() {
         if (LOG.isDebugEnabled()) {
diff --git a/phoenix-hive-base/src/main/java/org/apache/phoenix/hive/mapreduce/PhoenixRecordReader.java b/phoenix-hive-base/src/main/java/org/apache/phoenix/hive/mapreduce/PhoenixRecordReader.java
index 3b0dadf..757a256 100644
--- a/phoenix-hive-base/src/main/java/org/apache/phoenix/hive/mapreduce/PhoenixRecordReader.java
+++ b/phoenix-hive-base/src/main/java/org/apache/phoenix/hive/mapreduce/PhoenixRecordReader.java
@@ -22,8 +22,8 @@
 import java.util.ArrayList;
 import java.util.List;
 
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 import org.apache.hadoop.conf.Configuration;
 import org.apache.hadoop.hbase.client.Scan;
 import org.apache.hadoop.hbase.util.Bytes;
@@ -59,7 +59,7 @@
 public class PhoenixRecordReader<T extends DBWritable> implements
         RecordReader<WritableComparable, T> {
 
-    private static final Log LOG = LogFactory.getLog(PhoenixRecordReader.class);
+    private static final Logger LOG = LoggerFactory.getLogger(PhoenixRecordReader.class);
 
     private final Configuration configuration;
     private final QueryPlan queryPlan;
diff --git a/phoenix-hive-base/src/main/java/org/apache/phoenix/hive/mapreduce/PhoenixRecordWriter.java b/phoenix-hive-base/src/main/java/org/apache/phoenix/hive/mapreduce/PhoenixRecordWriter.java
index eba10d7..bd7a5c2 100644
--- a/phoenix-hive-base/src/main/java/org/apache/phoenix/hive/mapreduce/PhoenixRecordWriter.java
+++ b/phoenix-hive-base/src/main/java/org/apache/phoenix/hive/mapreduce/PhoenixRecordWriter.java
@@ -23,8 +23,8 @@
 import java.sql.SQLException;
 import java.util.Properties;
 
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 import org.apache.hadoop.conf.Configuration;
 import org.apache.hadoop.fs.Path;
 import org.apache.hadoop.hive.ql.io.AcidOutputFormat;
@@ -59,7 +59,7 @@
 public class PhoenixRecordWriter<T extends DBWritable> implements RecordWriter<NullWritable, T>,
         org.apache.hadoop.hive.ql.exec.FileSinkOperator.RecordWriter, RecordUpdater {
 
-    private static final Log LOG = LogFactory.getLog(PhoenixRecordWriter.class);
+    private static final Logger LOG = LoggerFactory.getLogger(PhoenixRecordWriter.class);
 
     private Connection conn;
     private PreparedStatement pstmt;
diff --git a/phoenix-hive-base/src/main/java/org/apache/phoenix/hive/mapreduce/PhoenixResultWritable.java b/phoenix-hive-base/src/main/java/org/apache/phoenix/hive/mapreduce/PhoenixResultWritable.java
index f322767..a97319d 100644
--- a/phoenix-hive-base/src/main/java/org/apache/phoenix/hive/mapreduce/PhoenixResultWritable.java
+++ b/phoenix-hive-base/src/main/java/org/apache/phoenix/hive/mapreduce/PhoenixResultWritable.java
@@ -17,8 +17,8 @@
  */
 package org.apache.phoenix.hive.mapreduce;
 
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 import org.apache.hadoop.conf.Configurable;
 import org.apache.hadoop.conf.Configuration;
 import org.apache.hadoop.io.Writable;
@@ -49,7 +49,7 @@
  */
 public class PhoenixResultWritable implements Writable, DBWritable, Configurable {
 
-    private static final Log LOG = LogFactory.getLog(PhoenixResultWritable.class);
+    private static final Logger LOG = LoggerFactory.getLogger(PhoenixResultWritable.class);
 
     private List<ColumnInfo> columnMetadataList;
     private List<Object> valueList;    // for output
diff --git a/phoenix-hive-base/src/main/java/org/apache/phoenix/hive/objectinspector/PhoenixObjectInspectorFactory.java b/phoenix-hive-base/src/main/java/org/apache/phoenix/hive/objectinspector/PhoenixObjectInspectorFactory.java
index 3a19ea7..fa0fe03 100644
--- a/phoenix-hive-base/src/main/java/org/apache/phoenix/hive/objectinspector/PhoenixObjectInspectorFactory.java
+++ b/phoenix-hive-base/src/main/java/org/apache/phoenix/hive/objectinspector/PhoenixObjectInspectorFactory.java
@@ -17,8 +17,8 @@
  */
 package org.apache.phoenix.hive.objectinspector;
 
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 import org.apache.hadoop.hive.serde2.lazy.LazySerDeParameters;
 import org.apache.hadoop.hive.serde2.lazy.objectinspector.LazyObjectInspectorFactory;
 import org.apache.hadoop.hive.serde2.lazy.objectinspector.LazySimpleStructObjectInspector;
@@ -38,7 +38,7 @@
 
 public class PhoenixObjectInspectorFactory {
 
-    private static final Log LOG = LogFactory.getLog(PhoenixObjectInspectorFactory.class);
+    private static final Logger LOG = LoggerFactory.getLogger(PhoenixObjectInspectorFactory.class);
 
     private PhoenixObjectInspectorFactory() {
 
diff --git a/phoenix-hive-base/src/main/java/org/apache/phoenix/hive/ppd/PhoenixPredicateDecomposer.java b/phoenix-hive-base/src/main/java/org/apache/phoenix/hive/ppd/PhoenixPredicateDecomposer.java
index 1e65819..91c1e63 100644
--- a/phoenix-hive-base/src/main/java/org/apache/phoenix/hive/ppd/PhoenixPredicateDecomposer.java
+++ b/phoenix-hive-base/src/main/java/org/apache/phoenix/hive/ppd/PhoenixPredicateDecomposer.java
@@ -17,8 +17,8 @@
  */
 package org.apache.phoenix.hive.ppd;
 
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 import org.apache.hadoop.hive.ql.metadata.HiveStoragePredicateHandler.DecomposedPredicate;
 import org.apache.hadoop.hive.ql.plan.ExprNodeDesc;
 import org.apache.hadoop.hive.ql.plan.ExprNodeGenericFuncDesc;
@@ -35,7 +35,7 @@
  */
 public class PhoenixPredicateDecomposer {
 
-    private static final Log LOG = LogFactory.getLog(PhoenixPredicateDecomposer.class);
+    private static final Logger LOG = LoggerFactory.getLogger(PhoenixPredicateDecomposer.class);
 
     private List<String> columnNameList;
     private boolean calledPPD;
diff --git a/phoenix-hive-base/src/main/java/org/apache/phoenix/hive/ql/index/IndexPredicateAnalyzer.java b/phoenix-hive-base/src/main/java/org/apache/phoenix/hive/ql/index/IndexPredicateAnalyzer.java
index d9160b0..bbf3dea 100644
--- a/phoenix-hive-base/src/main/java/org/apache/phoenix/hive/ql/index/IndexPredicateAnalyzer.java
+++ b/phoenix-hive-base/src/main/java/org/apache/phoenix/hive/ql/index/IndexPredicateAnalyzer.java
@@ -17,8 +17,8 @@
  */
 package org.apache.phoenix.hive.ql.index;
 
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 import org.apache.hadoop.hive.ql.exec.FunctionRegistry;
 import org.apache.hadoop.hive.ql.lib.DefaultGraphWalker;
 import org.apache.hadoop.hive.ql.lib.DefaultRuleDispatcher;
@@ -71,7 +71,7 @@
  */
 public class IndexPredicateAnalyzer {
 
-    private static final Log LOG = LogFactory.getLog(IndexPredicateAnalyzer.class);
+    private static final Logger LOG = LoggerFactory.getLogger(IndexPredicateAnalyzer.class);
 
     private final Set<String> udfNames;
     private final Map<String, Set<String>> columnToUDFs;
diff --git a/phoenix-hive-base/src/main/java/org/apache/phoenix/hive/query/PhoenixQueryBuilder.java b/phoenix-hive-base/src/main/java/org/apache/phoenix/hive/query/PhoenixQueryBuilder.java
index 91aff1f..7a7fcf1 100644
--- a/phoenix-hive-base/src/main/java/org/apache/phoenix/hive/query/PhoenixQueryBuilder.java
+++ b/phoenix-hive-base/src/main/java/org/apache/phoenix/hive/query/PhoenixQueryBuilder.java
@@ -30,8 +30,8 @@
 import com.google.common.base.CharMatcher;
 import com.google.common.base.Splitter;
 import org.apache.commons.lang3.StringUtils;
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 import org.apache.hadoop.hive.ql.plan.ExprNodeConstantDesc;
 import org.apache.hadoop.hive.serde.serdeConstants;
 import org.apache.hadoop.hive.serde2.typeinfo.TypeInfo;
@@ -51,7 +51,7 @@
 
 public class PhoenixQueryBuilder {
 
-    private static final Log LOG = LogFactory.getLog(PhoenixQueryBuilder.class);
+    private static final Logger LOG = LoggerFactory.getLogger(PhoenixQueryBuilder.class);
 
     private static final String QUERY_TEMPLATE = "select $HINT$ $COLUMN_LIST$ from $TABLE_NAME$";
 
diff --git a/phoenix-hive-base/src/main/java/org/apache/phoenix/hive/util/ColumnMappingUtils.java b/phoenix-hive-base/src/main/java/org/apache/phoenix/hive/util/ColumnMappingUtils.java
index 79c4b43..f4110ac 100644
--- a/phoenix-hive-base/src/main/java/org/apache/phoenix/hive/util/ColumnMappingUtils.java
+++ b/phoenix-hive-base/src/main/java/org/apache/phoenix/hive/util/ColumnMappingUtils.java
@@ -18,8 +18,8 @@
 
 package org.apache.phoenix.hive.util;
 
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 import org.apache.phoenix.hive.constants.PhoenixStorageHandlerConstants;
 
 import java.util.*;
@@ -29,7 +29,7 @@
  */
 public class ColumnMappingUtils {
 
-    private static final Log LOG = LogFactory.getLog(ColumnMappingUtils.class);
+    private static final Logger LOG = LoggerFactory.getLogger(ColumnMappingUtils.class);
 
     public static Map<String, String> getColumnMappingMap(String columnMappings) {
         if (LOG.isDebugEnabled()) {
diff --git a/phoenix-hive-base/src/main/java/org/apache/phoenix/hive/util/PhoenixConnectionUtil.java b/phoenix-hive-base/src/main/java/org/apache/phoenix/hive/util/PhoenixConnectionUtil.java
index d5eb86f..2bb73c9 100644
--- a/phoenix-hive-base/src/main/java/org/apache/phoenix/hive/util/PhoenixConnectionUtil.java
+++ b/phoenix-hive-base/src/main/java/org/apache/phoenix/hive/util/PhoenixConnectionUtil.java
@@ -23,8 +23,8 @@
 import java.util.Map;
 import java.util.Properties;
 
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 import org.apache.hadoop.conf.Configuration;
 import org.apache.hadoop.hbase.HConstants;
 import org.apache.hadoop.hive.metastore.api.Table;
@@ -39,7 +39,7 @@
 
 public class PhoenixConnectionUtil {
 
-    private static final Log LOG = LogFactory.getLog(PhoenixConnectionUtil.class);
+    private static final Logger LOG = LoggerFactory.getLogger(PhoenixConnectionUtil.class);
 
     public static Connection getInputConnection(final Configuration conf, final Properties props)
             throws SQLException {
@@ -82,7 +82,7 @@
         try {
             Class.forName("org.apache.phoenix.jdbc.PhoenixDriver");
         } catch (ClassNotFoundException e) {
-            LOG.warn(e.getStackTrace());
+            LOG.warn(String.valueOf(e.getStackTrace()));
         }
         return DriverManager.getConnection(QueryUtil.getUrl(zookeeperQuorum, clientPort,
                 zNodeParent));
diff --git a/phoenix-hive-base/src/main/java/org/apache/phoenix/hive/util/PhoenixStorageHandlerUtil.java b/phoenix-hive-base/src/main/java/org/apache/phoenix/hive/util/PhoenixStorageHandlerUtil.java
index d7af62f..831c4af 100644
--- a/phoenix-hive-base/src/main/java/org/apache/phoenix/hive/util/PhoenixStorageHandlerUtil.java
+++ b/phoenix-hive-base/src/main/java/org/apache/phoenix/hive/util/PhoenixStorageHandlerUtil.java
@@ -39,8 +39,8 @@
 import java.util.concurrent.atomic.AtomicReference;
 import java.util.concurrent.ConcurrentHashMap;
 import javax.naming.NamingException;
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 import org.apache.hadoop.conf.Configuration;
 import org.apache.hadoop.hbase.HRegionLocation;
 import org.apache.hadoop.hbase.util.Strings;
@@ -66,7 +66,7 @@
  */
 
 public abstract class PhoenixStorageHandlerUtil {
-    protected static final Log LOG = LogFactory.getLog(PhoenixStorageHandlerUtil.class);
+    protected static final Logger LOG = LoggerFactory.getLogger(PhoenixStorageHandlerUtil.class);
     protected static final AtomicReference<Method> GET_BUCKET_METHOD_REF = new AtomicReference<>();
     protected static final AtomicReference<Method> GET_BUCKET_ID_METHOD_REF = new AtomicReference<>();
 
@@ -151,7 +151,7 @@
         return constantValues;
     }
 
-    public static String getRegionLocation(HRegionLocation location, Log log) throws IOException {
+    public static String getRegionLocation(HRegionLocation location, Logger log) throws IOException {
         InetSocketAddress isa = new InetSocketAddress(location.getHostname(), location.getPort());
         if (isa.isUnresolved()) {
             log.warn("Failed resolve " + isa);
diff --git a/phoenix-hive-base/src/main/java/org/apache/phoenix/hive/util/PhoenixUtil.java b/phoenix-hive-base/src/main/java/org/apache/phoenix/hive/util/PhoenixUtil.java
index b450371..f247461 100644
--- a/phoenix-hive-base/src/main/java/org/apache/phoenix/hive/util/PhoenixUtil.java
+++ b/phoenix-hive-base/src/main/java/org/apache/phoenix/hive/util/PhoenixUtil.java
@@ -17,8 +17,8 @@
  */
 package org.apache.phoenix.hive.util;
 
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 import org.apache.hadoop.conf.Configuration;
 import org.apache.hadoop.hbase.client.Admin;
 import org.apache.hadoop.hbase.TableName;
@@ -50,7 +50,7 @@
  */
 public class PhoenixUtil {
 
-    private static final Log LOG = LogFactory.getLog(PhoenixUtil.class);
+    private static final Logger LOG = LoggerFactory.getLogger(PhoenixUtil.class);
 
     public static String getPhoenixType(String hiveTypeName) {
         if (hiveTypeName.startsWith("array")) {
diff --git a/phoenix-pig-base/src/it/java/org/apache/phoenix/pig/PhoenixHBaseLoaderIT.java b/phoenix-pig-base/src/it/java/org/apache/phoenix/pig/PhoenixHBaseLoaderIT.java
index 7fd5574..a8a7658 100644
--- a/phoenix-pig-base/src/it/java/org/apache/phoenix/pig/PhoenixHBaseLoaderIT.java
+++ b/phoenix-pig-base/src/it/java/org/apache/phoenix/pig/PhoenixHBaseLoaderIT.java
@@ -27,8 +27,8 @@
 import java.util.Iterator;
 import java.util.List;
 
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 import org.apache.phoenix.util.SchemaUtil;
 import org.apache.pig.builtin.mock.Storage;
 import org.apache.pig.builtin.mock.Storage.Data;
@@ -46,7 +46,7 @@
  */
 public class PhoenixHBaseLoaderIT extends BasePigIT {
 
-    private static final Log LOG = LogFactory.getLog(PhoenixHBaseLoaderIT.class);
+    private static final Logger LOG = LoggerFactory.getLogger(PhoenixHBaseLoaderIT.class);
     private static final String SCHEMA_NAME = "T";
     private static final String TABLE_NAME = "A";
     private static final String INDEX_NAME = "I";
diff --git a/phoenix-pig-base/src/main/java/org/apache/phoenix/pig/PhoenixHBaseLoader.java b/phoenix-pig-base/src/main/java/org/apache/phoenix/pig/PhoenixHBaseLoader.java
index 41d3203..7c0dfce 100644
--- a/phoenix-pig-base/src/main/java/org/apache/phoenix/pig/PhoenixHBaseLoader.java
+++ b/phoenix-pig-base/src/main/java/org/apache/phoenix/pig/PhoenixHBaseLoader.java
@@ -20,8 +20,8 @@
 import java.io.IOException;
 import java.util.Properties;
 
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 import org.apache.hadoop.conf.Configuration;
 import org.apache.hadoop.fs.Path;
 import org.apache.hadoop.hbase.HConstants;
@@ -76,7 +76,7 @@
  */
 public final class PhoenixHBaseLoader extends LoadFunc implements LoadMetadata {
 
-    private static final Log LOG = LogFactory.getLog(PhoenixHBaseLoader.class);
+    private static final Logger LOG = LoggerFactory.getLogger(PhoenixHBaseLoader.class);
     private static final String PHOENIX_TABLE_NAME_SCHEME = "hbase://table/";
     private static final String PHOENIX_QUERY_SCHEME      = "hbase://query/";
     private static final String RESOURCE_SCHEMA_SIGNATURE = "phoenix.pig.schema";
diff --git a/phoenix-pig-base/src/main/java/org/apache/phoenix/pig/util/PhoenixPigSchemaUtil.java b/phoenix-pig-base/src/main/java/org/apache/phoenix/pig/util/PhoenixPigSchemaUtil.java
index 7e0203f..8e57f94 100644
--- a/phoenix-pig-base/src/main/java/org/apache/phoenix/pig/util/PhoenixPigSchemaUtil.java
+++ b/phoenix-pig-base/src/main/java/org/apache/phoenix/pig/util/PhoenixPigSchemaUtil.java
@@ -21,8 +21,8 @@
 import java.sql.SQLException;
 import java.util.List;
 
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 import org.apache.hadoop.conf.Configuration;
 import org.apache.phoenix.mapreduce.util.PhoenixConfigurationUtil;
 import org.apache.phoenix.mapreduce.util.PhoenixConfigurationUtil.SchemaType;
@@ -40,7 +40,7 @@
  */
 public final class PhoenixPigSchemaUtil {
 
-    private static final Log LOG = LogFactory.getLog(PhoenixPigSchemaUtil.class);
+    private static final Logger LOG = LoggerFactory.getLogger(PhoenixPigSchemaUtil.class);
     
     private PhoenixPigSchemaUtil() {
     }
diff --git a/phoenix-pig-base/src/main/java/org/apache/phoenix/pig/util/QuerySchemaParserFunction.java b/phoenix-pig-base/src/main/java/org/apache/phoenix/pig/util/QuerySchemaParserFunction.java
index 8e4defb..8acd211 100644
--- a/phoenix-pig-base/src/main/java/org/apache/phoenix/pig/util/QuerySchemaParserFunction.java
+++ b/phoenix-pig-base/src/main/java/org/apache/phoenix/pig/util/QuerySchemaParserFunction.java
@@ -22,8 +22,8 @@
 import java.sql.Statement;
 import java.util.List;
 
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 import org.apache.hadoop.conf.Configuration;
 import org.apache.hadoop.hbase.util.Pair;
 import org.apache.phoenix.compile.ColumnProjector;
@@ -43,7 +43,7 @@
  */
 public class QuerySchemaParserFunction implements Function<String,Pair<String,String>> {
 
-    private static final Log LOG = LogFactory.getLog(QuerySchemaParserFunction.class);
+    private static final Logger LOG = LoggerFactory.getLogger(QuerySchemaParserFunction.class);
     private final Configuration configuration;
     
     public QuerySchemaParserFunction(Configuration configuration) {
diff --git a/phoenix-pig-base/src/main/java/org/apache/phoenix/pig/util/SqlQueryToColumnInfoFunction.java b/phoenix-pig-base/src/main/java/org/apache/phoenix/pig/util/SqlQueryToColumnInfoFunction.java
index b29ba81..0a04c67 100644
--- a/phoenix-pig-base/src/main/java/org/apache/phoenix/pig/util/SqlQueryToColumnInfoFunction.java
+++ b/phoenix-pig-base/src/main/java/org/apache/phoenix/pig/util/SqlQueryToColumnInfoFunction.java
@@ -22,8 +22,8 @@
 import java.sql.Statement;
 import java.util.List;
 
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 import org.apache.hadoop.conf.Configuration;
 import org.apache.phoenix.compile.ColumnProjector;
 import org.apache.phoenix.compile.QueryPlan;
@@ -37,7 +37,7 @@
 
 public final class SqlQueryToColumnInfoFunction implements Function<String,List<ColumnInfo>> {
     
-    private static final Log LOG = LogFactory.getLog(SqlQueryToColumnInfoFunction.class);
+    private static final Logger LOG = LoggerFactory.getLogger(SqlQueryToColumnInfoFunction.class);
     private final Configuration configuration;
 
     public SqlQueryToColumnInfoFunction(final Configuration configuration) {
diff --git a/phoenix-pig-base/src/main/java/org/apache/phoenix/pig/util/TypeUtil.java b/phoenix-pig-base/src/main/java/org/apache/phoenix/pig/util/TypeUtil.java
index 8c9bd6a..c7efdd9 100644
--- a/phoenix-pig-base/src/main/java/org/apache/phoenix/pig/util/TypeUtil.java
+++ b/phoenix-pig-base/src/main/java/org/apache/phoenix/pig/util/TypeUtil.java
@@ -27,8 +27,8 @@
 import java.util.List;
 import java.util.Map;
 
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 import org.apache.phoenix.mapreduce.PhoenixRecordWritable;
 import org.apache.phoenix.schema.types.PArrayDataType;
 import org.apache.phoenix.schema.types.PBinary;
@@ -72,7 +72,7 @@
 
 public final class TypeUtil {
 
-    private static final Log LOG = LogFactory.getLog(TypeUtil.class);
+    private static final Logger LOG = LoggerFactory.getLogger(TypeUtil.class);
     private static final HBaseBinaryConverter BINARY_CONVERTER = new HBaseBinaryConverter();
     private static final ImmutableMap<PDataType, Byte> PHOENIX_TO_PIG_TYPE = init();
     private static final TupleFactory TUPLE_FACTORY = TupleFactory.getInstance();
diff --git a/pom.xml b/pom.xml
index 528fff4..6d5060f 100644
--- a/pom.xml
+++ b/pom.xml
@@ -77,7 +77,7 @@
     <pig.version>0.13.0</pig.version>
     <log4j.version>1.2.17</log4j.version>
     <disruptor.version>3.3.6</disruptor.version>
-    <slf4j.version>1.6.4</slf4j.version>
+    <slf4j.version>1.7.25</slf4j.version>
     <commons-csv.version>1.0</commons-csv.version>
 
     <flume.version>1.4.0</flume.version>
