Repository: calcite Updated Branches: refs/heads/master f55d10c14 -> 05a57992a
http://git-wip-us.apache.org/repos/asf/calcite/blob/05a57992/core/src/main/java/org/apache/calcite/sql/parser/SqlParserUtil.java ---------------------------------------------------------------------- diff --git a/core/src/main/java/org/apache/calcite/sql/parser/SqlParserUtil.java b/core/src/main/java/org/apache/calcite/sql/parser/SqlParserUtil.java index c48ab66..03b0ac3 100644 --- a/core/src/main/java/org/apache/calcite/sql/parser/SqlParserUtil.java +++ b/core/src/main/java/org/apache/calcite/sql/parser/SqlParserUtil.java @@ -33,6 +33,8 @@ import org.apache.calcite.util.SaffronProperties; import org.apache.calcite.util.Util; import org.apache.calcite.util.trace.CalciteTrace; +import org.slf4j.Logger; + import java.math.BigDecimal; import java.math.BigInteger; import java.nio.charset.Charset; @@ -40,8 +42,6 @@ import java.text.SimpleDateFormat; import java.util.List; import java.util.Locale; import java.util.StringTokenizer; -import java.util.logging.Level; -import java.util.logging.Logger; import static org.apache.calcite.util.Static.RESOURCE; @@ -541,13 +541,9 @@ public final class SqlParserUtil { * taking operator precedence and associativity into account. */ public static SqlNode toTree(List<Object> list) { - if (LOGGER.isLoggable(Level.FINER)) { - LOGGER.finer("Attempting to reduce " + list); - } + LOGGER.trace("Attempting to reduce {}", list); final SqlNode node = toTreeEx(list, 0, 0, SqlKind.OTHER); - if (LOGGER.isLoggable(Level.FINE)) { - LOGGER.fine("Reduced " + node); - } + LOGGER.debug("Reduced {}", node); return node; } @@ -647,9 +643,7 @@ public final class SqlParserUtil { new SqlNode[]{leftExp, rightExp}); final SqlCall newExp = current.createCall(callPos, leftExp, rightExp); - if (LOGGER.isLoggable(Level.FINE)) { - LOGGER.fine("Reduced infix: " + newExp); - } + LOGGER.debug("Reduced infix: {}", newExp); // Replace elements {i - 1, i, i + 1} with the new // expression. @@ -681,9 +675,7 @@ public final class SqlParserUtil { currentPos.plusAll(new SqlNode[]{leftExp}); final SqlCall newExp = current.createCall(callPos, leftExp); - if (LOGGER.isLoggable(Level.FINE)) { - LOGGER.fine("Reduced postfix: " + newExp); - } + LOGGER.debug("Reduced postfix: {}", newExp); // Replace elements {i - 1, i} with the new expression. list.remove(i); @@ -733,9 +725,7 @@ public final class SqlParserUtil { } if ((previousRight < left) && (right >= nextLeft)) { i = specOp.reduceExpr(i, list); - if (LOGGER.isLoggable(Level.FINE)) { - LOGGER.fine("Reduced special op: " + list.get(i)); - } + LOGGER.debug("Reduced special op: {}", list.get(i)); break; } i = nextOrdinal; http://git-wip-us.apache.org/repos/asf/calcite/blob/05a57992/core/src/main/java/org/apache/calcite/sql/pretty/SqlPrettyWriter.java ---------------------------------------------------------------------- diff --git a/core/src/main/java/org/apache/calcite/sql/pretty/SqlPrettyWriter.java b/core/src/main/java/org/apache/calcite/sql/pretty/SqlPrettyWriter.java index 0d78656..948f3db 100644 --- a/core/src/main/java/org/apache/calcite/sql/pretty/SqlPrettyWriter.java +++ b/core/src/main/java/org/apache/calcite/sql/pretty/SqlPrettyWriter.java @@ -27,6 +27,8 @@ import org.apache.calcite.util.trace.CalciteLogger; import com.google.common.base.Throwables; +import org.slf4j.LoggerFactory; + import java.io.PrintWriter; import java.io.StringWriter; import java.lang.reflect.InvocationTargetException; @@ -39,7 +41,6 @@ import java.util.Map; import java.util.Objects; import java.util.Properties; import java.util.Set; -import java.util.logging.Logger; /** * Pretty printer for SQL statements. @@ -122,7 +123,7 @@ public class SqlPrettyWriter implements SqlWriter { protected static final CalciteLogger LOGGER = new CalciteLogger( - Logger.getLogger("org.apache.calcite.sql.pretty.SqlPrettyWriter")); + LoggerFactory.getLogger("org.apache.calcite.sql.pretty.SqlPrettyWriter")); /** * Bean holding the default property values. @@ -870,7 +871,7 @@ public class SqlPrettyWriter implements SqlWriter { if (result) { nextWhitespace = NL; } - LOGGER.finest("Token is '" + s + "'; result is " + result); + LOGGER.trace("Token is '{}'; result is {}", s, result); return result; } http://git-wip-us.apache.org/repos/asf/calcite/blob/05a57992/core/src/main/java/org/apache/calcite/sql/validate/SqlValidatorException.java ---------------------------------------------------------------------- diff --git a/core/src/main/java/org/apache/calcite/sql/validate/SqlValidatorException.java b/core/src/main/java/org/apache/calcite/sql/validate/SqlValidatorException.java index fe739f2..7a8bbdf 100644 --- a/core/src/main/java/org/apache/calcite/sql/validate/SqlValidatorException.java +++ b/core/src/main/java/org/apache/calcite/sql/validate/SqlValidatorException.java @@ -18,7 +18,8 @@ package org.apache.calcite.sql.validate; import org.apache.calcite.util.CalciteValidatorException; -import java.util.logging.Logger; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; // NOTE: This class gets compiled independently of everything else so that // resource generation can use reflection. That means it must have no @@ -36,7 +37,7 @@ public class SqlValidatorException extends Exception //~ Static fields/initializers --------------------------------------------- private static final Logger LOGGER = - Logger.getLogger("org.apache.calcite.runtime.CalciteException"); + LoggerFactory.getLogger("org.apache.calcite.runtime.CalciteException"); static final long serialVersionUID = -831683113957131387L; @@ -54,8 +55,8 @@ public class SqlValidatorException extends Exception super(message, cause); // TODO: see note in CalciteException constructor - LOGGER.throwing("SqlValidatorException", "constructor", this); - LOGGER.severe(toString()); + LOGGER.trace("SqlValidatorException", this); + LOGGER.error(toString()); } } http://git-wip-us.apache.org/repos/asf/calcite/blob/05a57992/core/src/main/java/org/apache/calcite/sql/validate/SqlValidatorImpl.java ---------------------------------------------------------------------- diff --git a/core/src/main/java/org/apache/calcite/sql/validate/SqlValidatorImpl.java b/core/src/main/java/org/apache/calcite/sql/validate/SqlValidatorImpl.java index ebc7ad0..b9ccf13 100644 --- a/core/src/main/java/org/apache/calcite/sql/validate/SqlValidatorImpl.java +++ b/core/src/main/java/org/apache/calcite/sql/validate/SqlValidatorImpl.java @@ -91,6 +91,8 @@ import com.google.common.collect.ImmutableList; import com.google.common.collect.Lists; import com.google.common.collect.Sets; +import org.slf4j.Logger; + import java.math.BigDecimal; import java.math.BigInteger; import java.util.AbstractList; @@ -109,8 +111,6 @@ import java.util.LinkedHashSet; import java.util.List; import java.util.Map; import java.util.Set; -import java.util.logging.Level; -import java.util.logging.Logger; import static org.apache.calcite.sql.SqlUtil.stripAs; import static org.apache.calcite.util.Static.RESOURCE; @@ -800,9 +800,7 @@ public class SqlValidatorImpl implements SqlValidatorWithHints { SqlNode outermostNode = performUnconditionalRewrites(topNode, false); cursorSet.add(outermostNode); top = outermostNode; - if (TRACER.isLoggable(Level.FINER)) { - TRACER.finer("After unconditional rewrite: " + outermostNode.toString()); - } + TRACER.trace("After unconditional rewrite: " + outermostNode.toString()); if (outermostNode.isA(SqlKind.TOP_LEVEL)) { registerQuery(scope, null, outermostNode, outermostNode, null, false); } @@ -812,9 +810,7 @@ public class SqlValidatorImpl implements SqlValidatorWithHints { // caller later without needing the scope deriveType(scope, outermostNode); } - if (TRACER.isLoggable(Level.FINER)) { - TRACER.finer("After validation: " + outermostNode.toString()); - } + TRACER.trace("After validation: " + outermostNode.toString()); return outermostNode; } http://git-wip-us.apache.org/repos/asf/calcite/blob/05a57992/core/src/main/java/org/apache/calcite/sql2rel/RelDecorrelator.java ---------------------------------------------------------------------- diff --git a/core/src/main/java/org/apache/calcite/sql2rel/RelDecorrelator.java b/core/src/main/java/org/apache/calcite/sql2rel/RelDecorrelator.java index 5d58f3f..252e6d1 100644 --- a/core/src/main/java/org/apache/calcite/sql2rel/RelDecorrelator.java +++ b/core/src/main/java/org/apache/calcite/sql2rel/RelDecorrelator.java @@ -97,6 +97,8 @@ import com.google.common.collect.Multimaps; import com.google.common.collect.Sets; import com.google.common.collect.SortedSetMultimap; +import org.slf4j.Logger; + import java.math.BigDecimal; import java.util.ArrayDeque; import java.util.ArrayList; @@ -112,8 +114,6 @@ import java.util.Set; import java.util.SortedMap; import java.util.TreeMap; import java.util.TreeSet; -import java.util.logging.Level; -import java.util.logging.Logger; /** * RelDecorrelator replaces all correlated expressions (corExp) in a relational @@ -199,8 +199,8 @@ public class RelDecorrelator implements ReflectiveVisitor { RelNode newRootRel = decorrelator.removeCorrelationViaRule(rootRel); - if (SQL2REL_LOGGER.isLoggable(Level.FINE)) { - SQL2REL_LOGGER.fine( + if (SQL2REL_LOGGER.isDebugEnabled()) { + SQL2REL_LOGGER.debug( RelOptUtil.dumpPlan( "Plan after removing Correlator", newRootRel, @@ -1741,9 +1741,8 @@ public class RelDecorrelator implements ReflectiveVisitor { final RelMetadataQuery mq = RelMetadataQuery.instance(); if (!RelMdUtil.areColumnsDefinitelyUniqueWhenNullsFiltered(mq, right, rightJoinKeys)) { - SQL2REL_LOGGER.fine(rightJoinKeys.toString() - + "are not unique keys for " - + right.toString()); + SQL2REL_LOGGER.debug("{} are not unique keys for {}", + rightJoinKeys.toString(), right.toString()); return; } @@ -1956,9 +1955,8 @@ public class RelDecorrelator implements ReflectiveVisitor { final RelMetadataQuery mq = RelMetadataQuery.instance(); if (!RelMdUtil.areColumnsDefinitelyUniqueWhenNullsFiltered(mq, left, correlatedInputRefJoinKeys)) { - SQL2REL_LOGGER.fine(correlatedJoinKeys.toString() - + "are not unique keys for " - + left.toString()); + SQL2REL_LOGGER.debug("{} are not unique keys for {}", + correlatedJoinKeys.toString(), left.toString()); return; } @@ -2034,7 +2032,7 @@ public class RelDecorrelator implements ReflectiveVisitor { // fields final RelMetadataQuery mq = RelMetadataQuery.instance(); if (!RelMdUtil.areColumnsDefinitelyUnique(mq, left, allCols)) { - SQL2REL_LOGGER.fine("There are no unique keys for " + left); + SQL2REL_LOGGER.debug("There are no unique keys for {}", left); return; } // http://git-wip-us.apache.org/repos/asf/calcite/blob/05a57992/core/src/main/java/org/apache/calcite/sql2rel/RelFieldTrimmer.java ---------------------------------------------------------------------- diff --git a/core/src/main/java/org/apache/calcite/sql2rel/RelFieldTrimmer.java b/core/src/main/java/org/apache/calcite/sql2rel/RelFieldTrimmer.java index bd62c87..5246fa9 100644 --- a/core/src/main/java/org/apache/calcite/sql2rel/RelFieldTrimmer.java +++ b/core/src/main/java/org/apache/calcite/sql2rel/RelFieldTrimmer.java @@ -73,7 +73,6 @@ import java.util.Collections; import java.util.LinkedHashSet; import java.util.List; import java.util.Set; -import java.util.logging.Level; /** * Transformer that walks over a tree of relational expressions, replacing each @@ -162,8 +161,8 @@ public class RelFieldTrimmer implements ReflectiveVisitor { if (!trimResult.right.isIdentity()) { throw new IllegalArgumentException(); } - if (SqlToRelConverter.SQL2REL_LOGGER.isLoggable(Level.FINE)) { - SqlToRelConverter.SQL2REL_LOGGER.fine( + if (SqlToRelConverter.SQL2REL_LOGGER.isDebugEnabled()) { + SqlToRelConverter.SQL2REL_LOGGER.debug( RelOptUtil.dumpPlan("Plan after trimming unused fields", trimResult.left, false, SqlExplainLevel.EXPPLAN_ATTRIBUTES)); } http://git-wip-us.apache.org/repos/asf/calcite/blob/05a57992/core/src/main/java/org/apache/calcite/sql2rel/SqlToRelConverter.java ---------------------------------------------------------------------- diff --git a/core/src/main/java/org/apache/calcite/sql2rel/SqlToRelConverter.java b/core/src/main/java/org/apache/calcite/sql2rel/SqlToRelConverter.java index a17df51..5a51ca9 100644 --- a/core/src/main/java/org/apache/calcite/sql2rel/SqlToRelConverter.java +++ b/core/src/main/java/org/apache/calcite/sql2rel/SqlToRelConverter.java @@ -167,6 +167,8 @@ import com.google.common.collect.Lists; import com.google.common.collect.Maps; import com.google.common.collect.Sets; +import org.slf4j.Logger; + import java.lang.reflect.Type; import java.math.BigDecimal; import java.util.AbstractList; @@ -181,8 +183,6 @@ import java.util.List; import java.util.Map; import java.util.Set; import java.util.TreeSet; -import java.util.logging.Level; -import java.util.logging.Logger; import static org.apache.calcite.sql.SqlUtil.stripAs; import static org.apache.calcite.util.Static.RESOURCE; @@ -533,9 +533,8 @@ public class SqlToRelConverter { .replace(RelCollationTraitDef.INSTANCE, collations); rootRel = rootRel.copy(traitSet, rootRel.getInputs()); } - boolean dumpPlan = SQL2REL_LOGGER.isLoggable(Level.FINE); - if (dumpPlan) { - SQL2REL_LOGGER.fine( + if (SQL2REL_LOGGER.isDebugEnabled()) { + SQL2REL_LOGGER.debug( RelOptUtil.dumpPlan( "Plan after trimming unused fields", rootRel, @@ -590,9 +589,8 @@ public class SqlToRelConverter { } checkConvertedType(query, result); - boolean dumpPlan = SQL2REL_LOGGER.isLoggable(Level.FINE); - if (dumpPlan) { - SQL2REL_LOGGER.fine( + if (SQL2REL_LOGGER.isDebugEnabled()) { + SQL2REL_LOGGER.debug( RelOptUtil.dumpPlan( "Plan after converting SqlNode to RelNode", result, http://git-wip-us.apache.org/repos/asf/calcite/blob/05a57992/core/src/main/java/org/apache/calcite/util/Benchmark.java ---------------------------------------------------------------------- diff --git a/core/src/main/java/org/apache/calcite/util/Benchmark.java b/core/src/main/java/org/apache/calcite/util/Benchmark.java index b992427..513123e 100644 --- a/core/src/main/java/org/apache/calcite/util/Benchmark.java +++ b/core/src/main/java/org/apache/calcite/util/Benchmark.java @@ -18,12 +18,12 @@ package org.apache.calcite.util; import org.apache.calcite.linq4j.function.Function1; -import java.text.MessageFormat; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + import java.util.ArrayList; import java.util.Collections; import java.util.List; -import java.util.logging.Level; -import java.util.logging.Logger; /** * Helps to run benchmarks by running the same task repeatedly and averaging @@ -35,7 +35,7 @@ public class Benchmark { * higher. */ public static final Logger LOGGER = - Logger.getLogger(Benchmark.class.getCanonicalName()); + LoggerFactory.getLogger(Benchmark.class); private final Function1<Statistician, Void> function; private final int repeat; @@ -52,13 +52,13 @@ public class Benchmark { * Returns whether performance tests are enabled. */ public static boolean enabled() { - return LOGGER.isLoggable(Level.FINE); + return LOGGER.isDebugEnabled(); } static long printDuration(String desc, long t0) { final long t1 = System.nanoTime(); final long duration = t1 - t0; - LOGGER.finer(desc + " took " + duration + " nanos"); + LOGGER.debug("{} took {} nanos", desc, duration); return duration; } @@ -88,7 +88,7 @@ public class Benchmark { } private void printDurations() { - if (!LOGGER.isLoggable(Level.FINE)) { + if (!LOGGER.isDebugEnabled()) { return; } @@ -120,14 +120,13 @@ public class Benchmark { } final double stddev = Math.sqrt(y / count); if (durations.size() == 0) { - LOGGER.fine(MessageFormat.format("{0}: {1}", desc, "no runs")); + LOGGER.debug("{}: {}", desc, "no runs"); } else { - LOGGER.fine( - MessageFormat.format( - "{0}: {1} first; {2} +- {3}; {4} min; {5} max; {6} nanos", + LOGGER.debug( + "{}: {} first; {} +- {}; {} min; {} max; {} nanos", desc, durations.get(0), avg, stddev, coreDurations.get(0), - Util.last(coreDurations), durationsString)); + Util.last(coreDurations), durationsString); } } } http://git-wip-us.apache.org/repos/asf/calcite/blob/05a57992/core/src/main/java/org/apache/calcite/util/Util.java ---------------------------------------------------------------------- diff --git a/core/src/main/java/org/apache/calcite/util/Util.java b/core/src/main/java/org/apache/calcite/util/Util.java index ed39af0..099f13c 100644 --- a/core/src/main/java/org/apache/calcite/util/Util.java +++ b/core/src/main/java/org/apache/calcite/util/Util.java @@ -37,6 +37,8 @@ import com.google.common.collect.Collections2; import com.google.common.collect.ImmutableList; import com.google.common.collect.ImmutableMap; +import org.slf4j.Logger; + import java.io.BufferedInputStream; import java.io.BufferedOutputStream; import java.io.BufferedReader; @@ -80,8 +82,6 @@ import java.util.Properties; import java.util.Set; import java.util.TimeZone; import java.util.jar.JarFile; -import java.util.logging.Level; -import java.util.logging.Logger; import java.util.regex.Matcher; import java.util.regex.Pattern; import javax.annotation.Nullable; @@ -235,7 +235,7 @@ public class Util { Throwable e, Logger logger) { if (logger != null) { - logger.log(Level.FINER, "Discarding exception", e); + logger.debug("Discarding exception", e); } } http://git-wip-us.apache.org/repos/asf/calcite/blob/05a57992/core/src/main/java/org/apache/calcite/util/trace/CalciteLogger.java ---------------------------------------------------------------------- diff --git a/core/src/main/java/org/apache/calcite/util/trace/CalciteLogger.java b/core/src/main/java/org/apache/calcite/util/trace/CalciteLogger.java index 8105f8e..4b15f17 100644 --- a/core/src/main/java/org/apache/calcite/util/trace/CalciteLogger.java +++ b/core/src/main/java/org/apache/calcite/util/trace/CalciteLogger.java @@ -16,21 +16,20 @@ */ package org.apache.calcite.util.trace; -import java.util.logging.Level; -import java.util.logging.Logger; +import org.slf4j.Logger; /** * Small extension to {@link Logger} with some performance improvements. * - * <p>{@link Logger#log(Level level, String msg, Object[] params)} is expensive + * <p>{@link Logger#info(String format, Object[] params)} is expensive * to call, since the caller must always allocate and fill in the array - * <code>params</code>, even when <code>level</code> will prevent a message - * being logged. On the other hand, {@link Logger#log(Level level, String msg)} - * and {@link Logger#log(Level level, String msg, Object)} do not have this + * <code>params</code>, even when the <code>level</code> will prevent a message + * being logged. On the other hand, {@link Logger#info(String msg)} + * and {@link Logger#info(String msg, Object o)} do not have this * problem. * * <p>As a workaround this class provides - * {@link #log(Level, String msg, Object, Object)} etc. (The varargs feature of + * {@link #info(String msg, Object o1, Object o2)} etc. (The varargs feature of * java 1.5 half-solves this problem, by automatically wrapping args in an * array, but it does so without testing the level.) * @@ -58,101 +57,156 @@ public class CalciteLogger { //~ Methods ---------------------------------------------------------------- + // WARN + /** - * Conditionally logs a message with two Object parameters + * Logs a WARN message with two Object parameters */ - public void log(Level level, String msg, Object arg1, Object arg2) { - if (logger.isLoggable(level)) { - logger.log( - level, - msg, - new Object[]{arg1, arg2}); + public void warn(String format, Object arg1, Object arg2) { + // slf4j already avoids the array creation for 1 or 2 arg invocations + logger.warn(format, arg1, arg2); + } + + /** + * Conditionally logs a WARN message with three Object parameters + */ + public void warn(String format, Object arg1, Object arg2, Object arg3) { + if (logger.isWarnEnabled()) { + logger.warn(format, arg1, arg2, arg3); + } + } + + /** + * Conditionally logs a WARN message with four Object parameters + */ + public void warn(String format, Object arg1, Object arg2, Object arg3, Object arg4) { + if (logger.isWarnEnabled()) { + logger.warn(format, arg1, arg2, arg3, arg4); + } + } + + public void warn(String format, Object... args) { + if (logger.isWarnEnabled()) { + logger.warn(format, args); } } + // INFO + /** - * Conditionally logs a message with three Object parameters + * Logs an INFO message with two Object parameters */ - public void log( - Level level, - String msg, - Object arg1, - Object arg2, - Object arg3) { - if (logger.isLoggable(level)) { - logger.log( - level, - msg, - new Object[]{arg1, arg2, arg3}); + public void info(String format, Object arg1, Object arg2) { + // slf4j already avoids the array creation for 1 or 2 arg invocations + logger.info(format, arg1, arg2); + } + + /** + * Conditionally logs an INFO message with three Object parameters + */ + public void info(String format, Object arg1, Object arg2, Object arg3) { + if (logger.isInfoEnabled()) { + logger.info(format, arg1, arg2, arg3); } } /** - * Conditionally logs a message with four Object parameters + * Conditionally logs an INFO message with four Object parameters */ - public void log( - Level level, - String msg, - Object arg1, - Object arg2, - Object arg3, - Object arg4) { - if (logger.isLoggable(level)) { - logger.log( - level, - msg, - new Object[]{arg1, arg2, arg3, arg4}); + public void info(String format, Object arg1, Object arg2, Object arg3, Object arg4) { + if (logger.isInfoEnabled()) { + logger.info(format, arg1, arg2, arg3, arg4); } } - // We expose and delegate the commonly used part of the Logger interface. - // For everything else, just expose the delegate. (Could use reflection.) - public Logger getLogger() { - return logger; + public void info(String format, Object... args) { + if (logger.isInfoEnabled()) { + logger.info(format, args); + } } - public void log(Level level, String msg) { - logger.log(level, msg); + // DEBUG + + /** + * Logs a DEBUG message with two Object parameters + */ + public void debug(String format, Object arg1, Object arg2) { + // slf4j already avoids the array creation for 1 or 2 arg invocations + logger.debug(format, arg1, arg2); } - public void log(Level level, String msg, Object param1) { - logger.log(level, msg, param1); + /** + * Conditionally logs a DEBUG message with three Object parameters + */ + public void debug(String format, Object arg1, Object arg2, Object arg3) { + if (logger.isDebugEnabled()) { + logger.debug(format, arg1, arg2, arg3); + } } - public void log(Level level, String msg, Object[] params) { - logger.log(level, msg, params); + /** + * Conditionally logs a DEBUG message with four Object parameters + */ + public void debug(String format, Object arg1, Object arg2, Object arg3, Object arg4) { + if (logger.isDebugEnabled()) { + logger.debug(format, arg1, arg2, arg3, arg4); + } } - public void log(Level level, String msg, Throwable thrown) { - logger.log(level, msg, thrown); + public void debug(String format, Object... args) { + if (logger.isDebugEnabled()) { + logger.debug(format, args); + } } - public void severe(String msg) { - logger.severe(msg); + // TRACE + + /** + * Logs a TRACE message with two Object parameters + */ + public void trace(String format, Object arg1, Object arg2) { + // slf4j already avoids the array creation for 1 or 2 arg invocations + logger.trace(format, arg1, arg2); } - public void warning(String msg) { - logger.warning(msg); + /** + * Conditionally logs a TRACE message with three Object parameters + */ + public void trace(String format, Object arg1, Object arg2, Object arg3) { + if (logger.isTraceEnabled()) { + logger.trace(format, arg1, arg2, arg3); + } } - public void info(String msg) { - logger.info(msg); + /** + * Conditionally logs a TRACE message with four Object parameters + */ + public void trace(String format, Object arg1, Object arg2, Object arg3, Object arg4) { + if (logger.isTraceEnabled()) { + logger.trace(format, arg1, arg2, arg3, arg4); + } } - public void config(String msg) { - logger.config(msg); + public void trace(String format, Object... args) { + if (logger.isTraceEnabled()) { + logger.trace(format, args); + } } - public void fine(String msg) { - logger.fine(msg); + // We expose and delegate the commonly used part of the Logger interface. + // For everything else, just expose the delegate. (Could use reflection.) + public Logger getLogger() { + return logger; } - public void finer(String msg) { - logger.finer(msg); + // Hold-over from the previous j.u.logging implementation + + public void warn(String msg) { + logger.warn(msg); } - public void finest(String msg) { - logger.finest(msg); + public void info(String msg) { + logger.info(msg); } } http://git-wip-us.apache.org/repos/asf/calcite/blob/05a57992/core/src/main/java/org/apache/calcite/util/trace/CalciteTimingTracer.java ---------------------------------------------------------------------- diff --git a/core/src/main/java/org/apache/calcite/util/trace/CalciteTimingTracer.java b/core/src/main/java/org/apache/calcite/util/trace/CalciteTimingTracer.java index bd962ba..792ab79 100644 --- a/core/src/main/java/org/apache/calcite/util/trace/CalciteTimingTracer.java +++ b/core/src/main/java/org/apache/calcite/util/trace/CalciteTimingTracer.java @@ -16,9 +16,9 @@ */ package org.apache.calcite.util.trace; +import org.slf4j.Logger; + import java.text.DecimalFormat; -import java.util.logging.Level; -import java.util.logging.Logger; /** * CalciteTimingTracer provides a mechanism for tracing the timing of a call @@ -49,14 +49,14 @@ public class CalciteTimingTracer { public CalciteTimingTracer( Logger logger, String startEvent) { - if (!logger.isLoggable(Level.FINE)) { + if (!logger.isDebugEnabled()) { this.logger = null; return; } else { this.logger = logger; } lastNanoTime = System.nanoTime(); - logger.fine(startEvent + ": elapsed nanos=0"); + logger.debug("{}: elapsed nanos=0", startEvent); } //~ Methods ---------------------------------------------------------------- @@ -73,8 +73,7 @@ public class CalciteTimingTracer { long newNanoTime = System.nanoTime(); long elapsed = newNanoTime - lastNanoTime; lastNanoTime = newNanoTime; - logger.fine( - event + ": elapsed nanos=" + DECIMAL_FORMAT.format(elapsed)); + logger.debug("{}: elapsed nanos={}", event, DECIMAL_FORMAT.format(elapsed)); } } http://git-wip-us.apache.org/repos/asf/calcite/blob/05a57992/core/src/main/java/org/apache/calcite/util/trace/CalciteTrace.java ---------------------------------------------------------------------- diff --git a/core/src/main/java/org/apache/calcite/util/trace/CalciteTrace.java b/core/src/main/java/org/apache/calcite/util/trace/CalciteTrace.java index eb04640..b3e46c4 100644 --- a/core/src/main/java/org/apache/calcite/util/trace/CalciteTrace.java +++ b/core/src/main/java/org/apache/calcite/util/trace/CalciteTrace.java @@ -22,12 +22,13 @@ import org.apache.calcite.plan.RelImplementor; import org.apache.calcite.plan.RelOptPlanner; import org.apache.calcite.prepare.Prepare; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + import java.io.File; -import java.util.logging.Level; -import java.util.logging.Logger; /** - * Contains all of the {@link java.util.logging.Logger tracers} used within + * Contains all of the {@link org.slf4j.Logger tracers} used within * org.apache.calcite class libraries. * * <h3>Note to developers</h3> @@ -39,8 +40,7 @@ import java.util.logging.Logger; * * <p>The javadoc in this file is the primary source of information on what * tracers are available, so the javadoc against each tracer member must be an - * up-to-date description of what that tracer does. Be sure to describe what - * {@link Level tracing level} is required to obtain each category of tracing. + * up-to-date description of what that tracer does. * * <p>In the class where the tracer is used, create a <em>private</em> (or * perhaps <em>protected</em>) <em>static final</em> member called <code> @@ -51,8 +51,7 @@ public abstract class CalciteTrace { /** * The "org.apache.calcite.sql.parser" tracer reports parser events in - * {@link org.apache.calcite.sql.parser.SqlParser} and other classes (at level - * {@link Level#FINE} or higher). + * {@link org.apache.calcite.sql.parser.SqlParser} and other classes at DEBUG. */ public static final Logger PARSER_LOGGER = getParserTracer(); @@ -73,30 +72,31 @@ public abstract class CalciteTrace { * <p>Levels: * * <ul> - * <li>{@link Level#FINE} prints rules as they fire; - * <li>{@link Level#FINER} prints and validates the whole expression pool - * and rule queue as each rule fires; - * <li>{@link Level#FINEST} prints finer details like rule importances. + * <li>{@link Logger#debug(String)} (formerly FINE) prints rules as they fire; + * <li>{@link Logger#trace(String)} (formerly FINER) prints and validates the whole expression + * pool and rule queue as each rule fires; + * <li>{@link Logger#trace(String)} (formerly FINEST) also prints finer details like rule + * importances. * </ul> */ public static Logger getPlannerTracer() { - return Logger.getLogger(RelOptPlanner.class.getName()); + return LoggerFactory.getLogger(RelOptPlanner.class.getName()); } /** * The "org.apache.calcite.prepare.Prepare" tracer prints the generated - * program at level {@link java.util.logging.Level#FINE} or higher. + * program at DEBUG (formerly, FINE) or higher. */ public static Logger getStatementTracer() { - return Logger.getLogger(Prepare.class.getName()); + return LoggerFactory.getLogger(Prepare.class.getName()); } /** * The "org.apache.calcite.rel.RelImplementorImpl" tracer reports when - * expressions are bound to variables ({@link Level#FINE}) + * expressions are bound to variables (DEBUG, formerly FINE) */ public static Logger getRelImplementorTracer() { - return Logger.getLogger(RelImplementor.class.getName()); + return LoggerFactory.getLogger(RelImplementor.class); } /** @@ -106,21 +106,21 @@ public abstract class CalciteTrace { * @see CalciteTimingTracer */ public static Logger getSqlTimingTracer() { - return Logger.getLogger("org.apache.calcite.sql.timing"); + return LoggerFactory.getLogger("org.apache.calcite.sql.timing"); } /** * The "org.apache.calcite.sql.parser" tracer reports parse events. */ public static Logger getParserTracer() { - return Logger.getLogger("org.apache.calcite.sql.parser"); + return LoggerFactory.getLogger("org.apache.calcite.sql.parser"); } /** * The "org.apache.calcite.sql2rel" tracer reports parse events. */ public static Logger getSqlToRelTracer() { - return Logger.getLogger("org.apache.calcite.sql2rel"); + return LoggerFactory.getLogger("org.apache.calcite.sql2rel"); } /** http://git-wip-us.apache.org/repos/asf/calcite/blob/05a57992/core/src/test/java/org/apache/calcite/test/SqlValidatorTest.java ---------------------------------------------------------------------- diff --git a/core/src/test/java/org/apache/calcite/test/SqlValidatorTest.java b/core/src/test/java/org/apache/calcite/test/SqlValidatorTest.java index 2584dd2..cde2b8c 100644 --- a/core/src/test/java/org/apache/calcite/test/SqlValidatorTest.java +++ b/core/src/test/java/org/apache/calcite/test/SqlValidatorTest.java @@ -39,11 +39,13 @@ import org.junit.BeforeClass; import org.junit.Ignore; import org.junit.Test; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + import java.nio.charset.Charset; import java.util.Arrays; import java.util.List; import java.util.Locale; -import java.util.logging.Logger; import static org.hamcrest.CoreMatchers.equalTo; import static org.junit.Assert.assertEquals; @@ -70,7 +72,7 @@ public class SqlValidatorTest extends SqlValidatorTestCase { private static final String ANY = "(?s).*"; protected static final Logger LOGGER = - Logger.getLogger(SqlValidatorTest.class.getName()); + LoggerFactory.getLogger(SqlValidatorTest.class); private static final String ERR_IN_VALUES_INCOMPATIBLE = "Values in expression list must have compatible types"; http://git-wip-us.apache.org/repos/asf/calcite/blob/05a57992/core/src/test/resources/log4j.properties ---------------------------------------------------------------------- diff --git a/core/src/test/resources/log4j.properties b/core/src/test/resources/log4j.properties new file mode 100644 index 0000000..834e2db --- /dev/null +++ b/core/src/test/resources/log4j.properties @@ -0,0 +1,24 @@ +# Licensed to the Apache Software Foundation (ASF) under one or more +# contributor license agreements. See the NOTICE file distributed with +# this work for additional information regarding copyright ownership. +# The ASF 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. + +# Root logger is configured at INFO and is sent to A1 +log4j.rootLogger=INFO, A1 + +# A1 goes to the console +log4j.appender.A1=org.apache.log4j.ConsoleAppender + +# Set the pattern for each log message +log4j.appender.A1.layout=org.apache.log4j.PatternLayout +log4j.appender.A1.layout.ConversionPattern=%d [%t] %-5p - %m%n http://git-wip-us.apache.org/repos/asf/calcite/blob/05a57992/mongodb/pom.xml ---------------------------------------------------------------------- diff --git a/mongodb/pom.xml b/mongodb/pom.xml index 95132fb..3e65fd3 100644 --- a/mongodb/pom.xml +++ b/mongodb/pom.xml @@ -38,6 +38,10 @@ limitations under the License. in dependencyManagement in the root POM, not here. --> <dependency> <groupId>org.apache.calcite</groupId> + <artifactId>calcite-avatica</artifactId> + </dependency> + <dependency> + <groupId>org.apache.calcite</groupId> <artifactId>calcite-core</artifactId> <type>jar</type> </dependency> @@ -70,6 +74,15 @@ limitations under the License. <groupId>org.mongodb</groupId> <artifactId>mongo-java-driver</artifactId> </dependency> + <dependency> + <groupId>org.slf4j</groupId> + <artifactId>slf4j-api</artifactId> + </dependency> + <dependency> + <groupId>org.slf4j</groupId> + <artifactId>slf4j-log4j12</artifactId> + <scope>test</scope> + </dependency> </dependencies> <build> @@ -77,6 +90,26 @@ limitations under the License. <!-- Sorted by groupId, artifactId. Put versions in pluginManagement in the root POM, not here. --> <plugin> + <artifactId>maven-dependency-plugin</artifactId> + <executions> + <execution> + <id>analyze</id> + <goals> + <goal>analyze-only</goal> + </goals> + <configuration> + <failOnWarning>true</failOnWarning> + <!-- ignore "unused but declared" warnings --> + <ignoredUnusedDeclaredDependencies> + <ignoredUnusedDeclaredDependency>org.apache.calcite:calcite-avatica</ignoredUnusedDeclaredDependency> + <ignoredUnusedDeclaredDependency>org.slf4j:slf4j-api</ignoredUnusedDeclaredDependency> + <ignoredUnusedDeclaredDependency>org.slf4j:slf4j-log4j12</ignoredUnusedDeclaredDependency> + </ignoredUnusedDeclaredDependencies> + </configuration> + </execution> + </executions> + </plugin> + <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-jar-plugin</artifactId> <executions> http://git-wip-us.apache.org/repos/asf/calcite/blob/05a57992/mongodb/src/main/java/org/apache/calcite/adapter/mongodb/MongoRules.java ---------------------------------------------------------------------- diff --git a/mongodb/src/main/java/org/apache/calcite/adapter/mongodb/MongoRules.java b/mongodb/src/main/java/org/apache/calcite/adapter/mongodb/MongoRules.java index 50478ee..2f4bbef 100644 --- a/mongodb/src/main/java/org/apache/calcite/adapter/mongodb/MongoRules.java +++ b/mongodb/src/main/java/org/apache/calcite/adapter/mongodb/MongoRules.java @@ -46,12 +46,13 @@ import org.apache.calcite.util.Bug; import org.apache.calcite.util.Util; import org.apache.calcite.util.trace.CalciteTrace; +import org.slf4j.Logger; + import java.util.AbstractList; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; -import java.util.logging.Logger; /** * Rules and relational operators for @@ -518,7 +519,7 @@ public class MongoRules { agg.getGroupSets(), agg.getAggCallList()); } catch (InvalidRelException e) { - LOGGER.warning(e.toString()); + LOGGER.warn(e.toString()); return null; } } http://git-wip-us.apache.org/repos/asf/calcite/blob/05a57992/mongodb/src/test/resources/log4j.properties ---------------------------------------------------------------------- diff --git a/mongodb/src/test/resources/log4j.properties b/mongodb/src/test/resources/log4j.properties new file mode 100644 index 0000000..834e2db --- /dev/null +++ b/mongodb/src/test/resources/log4j.properties @@ -0,0 +1,24 @@ +# Licensed to the Apache Software Foundation (ASF) under one or more +# contributor license agreements. See the NOTICE file distributed with +# this work for additional information regarding copyright ownership. +# The ASF 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. + +# Root logger is configured at INFO and is sent to A1 +log4j.rootLogger=INFO, A1 + +# A1 goes to the console +log4j.appender.A1=org.apache.log4j.ConsoleAppender + +# Set the pattern for each log message +log4j.appender.A1.layout=org.apache.log4j.PatternLayout +log4j.appender.A1.layout.ConversionPattern=%d [%t] %-5p - %m%n http://git-wip-us.apache.org/repos/asf/calcite/blob/05a57992/piglet/pom.xml ---------------------------------------------------------------------- diff --git a/piglet/pom.xml b/piglet/pom.xml index 0cb463d..790910e 100644 --- a/piglet/pom.xml +++ b/piglet/pom.xml @@ -79,6 +79,15 @@ limitations under the License. <artifactId>hsqldb</artifactId> <scope>test</scope> </dependency> + <dependency> + <groupId>org.slf4j</groupId> + <artifactId>slf4j-api</artifactId> + </dependency> + <dependency> + <groupId>org.slf4j</groupId> + <artifactId>slf4j-log4j12</artifactId> + <scope>test</scope> + </dependency> </dependencies> <build> @@ -147,6 +156,8 @@ limitations under the License. <ignoredUnusedDeclaredDependencies> <ignoredUnusedDeclaredDependency>net.hydromatic:scott-data-hsqldb</ignoredUnusedDeclaredDependency> <ignoredUnusedDeclaredDependency>org.hsqldb:hsqldb</ignoredUnusedDeclaredDependency> + <ignoredUnusedDeclaredDependency>org.slf4j:slf4j-api</ignoredUnusedDeclaredDependency> + <ignoredUnusedDeclaredDependency>org.slf4j:slf4j-log4j12</ignoredUnusedDeclaredDependency> </ignoredUnusedDeclaredDependencies> </configuration> </execution> http://git-wip-us.apache.org/repos/asf/calcite/blob/05a57992/piglet/src/main/javacc/PigletParser.jj ---------------------------------------------------------------------- diff --git a/piglet/src/main/javacc/PigletParser.jj b/piglet/src/main/javacc/PigletParser.jj index 9a6a43d..069400d 100644 --- a/piglet/src/main/javacc/PigletParser.jj +++ b/piglet/src/main/javacc/PigletParser.jj @@ -37,9 +37,9 @@ import org.apache.calcite.util.Pair; import com.google.common.collect.ImmutableList; import com.google.common.collect.Lists; +import org.slf4j.Logger; + import java.util.List; -import java.util.logging.Level; -import java.util.logging.Logger; import static org.apache.calcite.util.Static.RESOURCE; @@ -61,7 +61,7 @@ PARSER_END(PigletParser) JAVACODE void debug_message1() { - LOGGER.log(Level.INFO, getToken(0).image + " , " + getToken(1).image); + LOGGER.info("{} , {}", getToken(0).image, getToken(1).image); } JAVACODE String unquotedIdentifier() { http://git-wip-us.apache.org/repos/asf/calcite/blob/05a57992/piglet/src/test/resources/log4j.properties ---------------------------------------------------------------------- diff --git a/piglet/src/test/resources/log4j.properties b/piglet/src/test/resources/log4j.properties new file mode 100644 index 0000000..834e2db --- /dev/null +++ b/piglet/src/test/resources/log4j.properties @@ -0,0 +1,24 @@ +# Licensed to the Apache Software Foundation (ASF) under one or more +# contributor license agreements. See the NOTICE file distributed with +# this work for additional information regarding copyright ownership. +# The ASF 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. + +# Root logger is configured at INFO and is sent to A1 +log4j.rootLogger=INFO, A1 + +# A1 goes to the console +log4j.appender.A1=org.apache.log4j.ConsoleAppender + +# Set the pattern for each log message +log4j.appender.A1.layout=org.apache.log4j.PatternLayout +log4j.appender.A1.layout.ConversionPattern=%d [%t] %-5p - %m%n http://git-wip-us.apache.org/repos/asf/calcite/blob/05a57992/pom.xml ---------------------------------------------------------------------- diff --git a/pom.xml b/pom.xml index fab54ef..a2dffd4 100644 --- a/pom.xml +++ b/pom.xml @@ -102,6 +102,7 @@ limitations under the License. <scala.version>2.10.3</scala.version> <scott-data-hsqldb.version>0.1</scott-data-hsqldb.version> <servlet.version>3.0.1</servlet.version> + <slf4j.version>1.7.13</slf4j.version> <spark.version>0.9.0-incubating</spark.version> <sqlline.version>1.1.9</sqlline.version> <xalan.version>2.7.1</xalan.version> @@ -182,11 +183,6 @@ limitations under the License. <version>${commons-dbcp.version}</version> </dependency> <dependency> - <groupId>commons-logging</groupId> - <artifactId>commons-logging</artifactId> - <version>${commons-logging.version}</version> - </dependency> - <dependency> <groupId>com.fasterxml.jackson.core</groupId> <artifactId>jackson-core</artifactId> <version>${jackson.version}</version> @@ -357,6 +353,16 @@ limitations under the License. <version>${jmh.version}</version> </dependency> <dependency> + <groupId>org.slf4j</groupId> + <artifactId>slf4j-api</artifactId> + <version>${slf4j.version}</version> + </dependency> + <dependency> + <groupId>org.slf4j</groupId> + <artifactId>slf4j-log4j12</artifactId> + <version>${slf4j.version}</version> + </dependency> + <dependency> <groupId>sqlline</groupId> <artifactId>sqlline</artifactId> <version>${sqlline.version}</version> http://git-wip-us.apache.org/repos/asf/calcite/blob/05a57992/site/_docs/history.md ---------------------------------------------------------------------- diff --git a/site/_docs/history.md b/site/_docs/history.md index 3eba953..d46bfc8 100644 --- a/site/_docs/history.md +++ b/site/_docs/history.md @@ -28,6 +28,20 @@ For a full list of releases, see Downloads are available on the [downloads page]({{ site.baseurl }}/downloads/). +## 1.7.0 / (Under Development) +{: #v1-7-0} + +One notable change is that the use of JUL (java.util.logging) has been replaced +with [SLF4J](http://slf4j.org/). SLF4J provides an API which Calcite can use +independent of the logging implementation. This ultimately provides additional +flexibility to users, allowing them to configure Calcite's logging within their +own chosen logging framework. This work was done in [CALCITE-669](https://issues.apache.org/jira/browse/CALCITE-669). + +For users experienced with configuring JUL in Calcite previously, there are some +differences as some the JUL logging levels do not exist in SLF4J: `FINE`, +`FINER`, and `FINEST`, specifically. To deal with this, `FINE` was mapped +to SLF4J's `DEBUG` level, while `FINER` and `FINEST` were mapped to SLF4J's `TRACE`. + ## <a href="https://github.com/apache/calcite/releases/tag/calcite-1.6.0">1.6.0</a> / 2016-01-22 {: #v1-6-0} @@ -2327,4 +2341,3 @@ with the other changes in that release. {: #linq4j-v0-1-11} * Initial commit - http://git-wip-us.apache.org/repos/asf/calcite/blob/05a57992/site/_docs/howto.md ---------------------------------------------------------------------- diff --git a/site/_docs/howto.md b/site/_docs/howto.md index e64e5af..1498152 100644 --- a/site/_docs/howto.md +++ b/site/_docs/howto.md @@ -170,7 +170,7 @@ See the [developers guide]({{ site.baseurl }}/develop/#getting-started). To enable tracing, add the following flags to the java command line: -`-Dcalcite.debug=true -Djava.util.logging.config.file=core/src/test/resources/logging.properties` +`-Dcalcite.debug=true` The first flag causes Calcite to print the Java code it generates (to execute queries) to stdout. It is especially useful if you are debugging @@ -179,22 +179,20 @@ mysterious problems like this: `Exception in thread "main" java.lang.ClassCastException: Integer cannot be cast to Long at Baz$1$1.current(Unknown Source)` -The second flag specifies a config file for -the <a href="http://docs.oracle.com/javase/7/docs/api/java/util/logging/package-summary.html">java.util.logging</a> -framework. Put the following into core/src/test/resources/logging.properties: +By default, Calcite uses the Log4j bindings for SLF4J. There is a provided configuration +file which outputs logging at the INFO level to the console in `core/src/test/resources/log4j.properties`. +You can modify the level for the rootLogger to increase verbosity or change the level +for a specific class if you so choose. {% highlight properties %} -handlers= java.util.logging.ConsoleHandler -.level= INFO -org.apache.calcite.plan.RelOptPlanner.level=FINER -java.util.logging.ConsoleHandler.level=ALL +# Change rootLogger level to WARN +log4j.rootLogger=WARN, A1 +# Increase level to DEBUG for RelOptPlanner +log4j.logger.org.apache.calcite.plan.RelOptPlanner=DEBUG +# Increase level to TRACE for HepPlanner +log4j.logger.org.apache.calcite.plan.hep.HepPlanner=TRACE {% endhighlight %} -The line `org.apache.calcite.plan.RelOptPlanner.level=FINER` tells the planner to produce -fairly verbose output. You can modify the file to enable other loggers, or to change levels. -For instance, if you change `FINER` to `FINEST` the planner will give you an account of the -planning process so detailed that it might fill up your hard drive. - ## CSV adapter See the [tutorial](/docs/tutorial.html). http://git-wip-us.apache.org/repos/asf/calcite/blob/05a57992/splunk/pom.xml ---------------------------------------------------------------------- diff --git a/splunk/pom.xml b/splunk/pom.xml index ea6f407..5b955b5 100644 --- a/splunk/pom.xml +++ b/splunk/pom.xml @@ -73,6 +73,15 @@ limitations under the License. <artifactId>hamcrest-core</artifactId> <scope>test</scope> </dependency> + <dependency> + <groupId>org.slf4j</groupId> + <artifactId>slf4j-api</artifactId> + </dependency> + <dependency> + <groupId>org.slf4j</groupId> + <artifactId>slf4j-log4j12</artifactId> + <scope>test</scope> + </dependency> </dependencies> <build> @@ -82,6 +91,25 @@ limitations under the License. plugin declared here, IDEs don't know the sources are available. --> <plugin> + <artifactId>maven-dependency-plugin</artifactId> + <executions> + <execution> + <id>analyze</id> + <goals> + <goal>analyze-only</goal> + </goals> + <configuration> + <failOnWarning>true</failOnWarning> + <!-- ignore "unused but declared" warnings --> + <ignoredUnusedDeclaredDependencies> + <ignoredUnusedDeclaredDependency>org.slf4j:slf4j-api</ignoredUnusedDeclaredDependency> + <ignoredUnusedDeclaredDependency>org.slf4j:slf4j-log4j12</ignoredUnusedDeclaredDependency> + </ignoredUnusedDeclaredDependencies> + </configuration> + </execution> + </executions> + </plugin> + <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-source-plugin</artifactId> <executions> http://git-wip-us.apache.org/repos/asf/calcite/blob/05a57992/splunk/src/main/java/org/apache/calcite/adapter/splunk/SplunkPushDownRule.java ---------------------------------------------------------------------- diff --git a/splunk/src/main/java/org/apache/calcite/adapter/splunk/SplunkPushDownRule.java b/splunk/src/main/java/org/apache/calcite/adapter/splunk/SplunkPushDownRule.java index d432466..a9c0d8e 100644 --- a/splunk/src/main/java/org/apache/calcite/adapter/splunk/SplunkPushDownRule.java +++ b/splunk/src/main/java/org/apache/calcite/adapter/splunk/SplunkPushDownRule.java @@ -41,11 +41,12 @@ import org.apache.calcite.util.Pair; import com.google.common.collect.ImmutableSet; +import org.slf4j.Logger; + import java.util.ArrayList; import java.util.LinkedList; import java.util.List; import java.util.Set; -import java.util.logging.Logger; /** * Planner rule to push filters and projections to Splunk. @@ -111,7 +112,7 @@ public class SplunkPushDownRule // implement RelOptRule public void onMatch(RelOptRuleCall call) { - LOGGER.fine(description); + LOGGER.debug(description); int relLength = call.rels.length; SplunkTableScan splunkRel = @@ -149,7 +150,7 @@ public class SplunkPushDownRule SqlOperator op = filterCall.getOperator(); List<RexNode> operands = filterCall.getOperands(); - LOGGER.fine("fieldNames: " + getFieldsString(topRow)); + LOGGER.debug("fieldNames: {}", getFieldsString(topRow)); final StringBuilder buf = new StringBuilder(); if (getFilter(op, operands, buf, topRow.getFieldNames())) { @@ -165,7 +166,7 @@ public class SplunkPushDownRule if (topProj != null) { topRow = topProj.getRowType(); } - LOGGER.fine("pre transformTo fieldNames: " + getFieldsString(topRow)); + LOGGER.debug("pre transformTo fieldNames: {}", getFieldsString(topRow)); call.transformTo( appendSearchString( @@ -227,7 +228,7 @@ public class SplunkPushDownRule // handle top projection (ie reordering and renaming) List<RelDataTypeField> newFields = bottomFields; if (topProj != null) { - LOGGER.fine("topProj: " + String.valueOf(topProj.getPermutation())); + LOGGER.debug("topProj: {}", String.valueOf(topProj.getPermutation())); newFields = new ArrayList<RelDataTypeField>(); int i = 0; for (RexNode rn : topProj.getProjects()) { @@ -266,9 +267,9 @@ public class SplunkPushDownRule splunkRel.latest, resultType.getFieldNames()); - LOGGER.fine( - "end of appendSearchString fieldNames: " - + rel.getRowType().getFieldNames()); + LOGGER.debug( + "end of appendSearchString fieldNames: {}", + rel.getRowType().getFieldNames()); return rel; } http://git-wip-us.apache.org/repos/asf/calcite/blob/05a57992/splunk/src/main/java/org/apache/calcite/adapter/splunk/search/SplunkConnectionImpl.java ---------------------------------------------------------------------- diff --git a/splunk/src/main/java/org/apache/calcite/adapter/splunk/search/SplunkConnectionImpl.java b/splunk/src/main/java/org/apache/calcite/adapter/splunk/search/SplunkConnectionImpl.java index 69affa1..8a41556 100644 --- a/splunk/src/main/java/org/apache/calcite/adapter/splunk/search/SplunkConnectionImpl.java +++ b/splunk/src/main/java/org/apache/calcite/adapter/splunk/search/SplunkConnectionImpl.java @@ -23,6 +23,9 @@ import org.apache.calcite.linq4j.Linq4j; import au.com.bytecode.opencsv.CSVReader; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + import java.io.BufferedReader; import java.io.Closeable; import java.io.IOException; @@ -37,7 +40,6 @@ import java.util.HashMap; import java.util.LinkedHashMap; import java.util.List; import java.util.Map; -import java.util.logging.Logger; import java.util.regex.Matcher; import java.util.regex.Pattern; @@ -49,7 +51,7 @@ import static org.apache.calcite.adapter.splunk.util.HttpUtils.post; */ public class SplunkConnectionImpl implements SplunkConnection { private static final Logger LOGGER = - Logger.getLogger(SplunkConnectionImpl.class.getName()); + LoggerFactory.getLogger(SplunkConnectionImpl.class); private static final Pattern SESSION_KEY = Pattern.compile( @@ -175,8 +177,7 @@ public class SplunkConnectionImpl implements SplunkConnection { } catch (Exception e) { StringWriter sw = new StringWriter(); e.printStackTrace(new PrintWriter(sw)); - LOGGER.warning(e.getMessage() + "\n" - + sw); + LOGGER.warn("{}\n{}", e.getMessage(), sw); return srl == null ? Linq4j.emptyEnumerator() : null; } } @@ -202,8 +203,7 @@ public class SplunkConnectionImpl implements SplunkConnection { } catch (IOException ignore) { StringWriter sw = new StringWriter(); ignore.printStackTrace(new PrintWriter(sw)); - LOGGER.warning(ignore.getMessage() + "\n" - + sw); + LOGGER.warn("{}\n{}", ignore.getMessage(), sw); } finally { HttpUtils.close(csvr); // CSVReader closes the input stream too } @@ -381,8 +381,7 @@ public class SplunkConnectionImpl implements SplunkConnection { } catch (IOException ignore) { StringWriter sw = new StringWriter(); ignore.printStackTrace(new PrintWriter(sw)); - LOGGER.warning(ignore.getMessage() + "\n" - + sw); + LOGGER.warn("{}\n{}", ignore.getMessage(), sw); } } @@ -423,8 +422,7 @@ public class SplunkConnectionImpl implements SplunkConnection { } catch (IOException ignore) { StringWriter sw = new StringWriter(); ignore.printStackTrace(new PrintWriter(sw)); - LOGGER.warning(ignore.getMessage() + "\n" - + sw); + LOGGER.warn("{}\n{}", ignore.getMessage(), sw); } return false; } http://git-wip-us.apache.org/repos/asf/calcite/blob/05a57992/splunk/src/main/java/org/apache/calcite/adapter/splunk/util/HttpUtils.java ---------------------------------------------------------------------- diff --git a/splunk/src/main/java/org/apache/calcite/adapter/splunk/util/HttpUtils.java b/splunk/src/main/java/org/apache/calcite/adapter/splunk/util/HttpUtils.java index 2ec870d..e259397 100644 --- a/splunk/src/main/java/org/apache/calcite/adapter/splunk/util/HttpUtils.java +++ b/splunk/src/main/java/org/apache/calcite/adapter/splunk/util/HttpUtils.java @@ -16,6 +16,8 @@ */ package org.apache.calcite.adapter.splunk.util; +import org.slf4j.Logger; + import java.io.Closeable; import java.io.IOException; import java.io.InputStream; @@ -26,8 +28,6 @@ import java.net.URL; import java.net.URLConnection; import java.net.URLEncoder; import java.util.Map; -import java.util.logging.Level; -import java.util.logging.Logger; import javax.net.ssl.HostnameVerifier; import javax.net.ssl.HttpsURLConnection; import javax.net.ssl.SSLSession; @@ -156,9 +156,7 @@ public class HttpUtils { InputStream in = conn.getInputStream(); wr.close(); - if (LOGGER.isLoggable(Level.FINE)) { - LOGGER.fine("url: " + url + ", data: " + String.valueOf(data)); - } + LOGGER.debug("url: {}, data: {}", url, String.valueOf(data)); return in; } finally { close(wr); http://git-wip-us.apache.org/repos/asf/calcite/blob/05a57992/splunk/src/main/java/org/apache/calcite/adapter/splunk/util/StringUtils.java ---------------------------------------------------------------------- diff --git a/splunk/src/main/java/org/apache/calcite/adapter/splunk/util/StringUtils.java b/splunk/src/main/java/org/apache/calcite/adapter/splunk/util/StringUtils.java index 5000d1d..ac08949 100644 --- a/splunk/src/main/java/org/apache/calcite/adapter/splunk/util/StringUtils.java +++ b/splunk/src/main/java/org/apache/calcite/adapter/splunk/util/StringUtils.java @@ -16,9 +16,11 @@ */ package org.apache.calcite.adapter.splunk.util; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + import java.util.LinkedList; import java.util.List; -import java.util.logging.Logger; /** * Utility methods for encoding and decoding strings for Splunk REST calls. @@ -150,7 +152,7 @@ public class StringUtils { } public static Logger getClassTracer(Class clazz) { - return Logger.getLogger(clazz.getName()); + return LoggerFactory.getLogger(clazz); } } http://git-wip-us.apache.org/repos/asf/calcite/blob/05a57992/splunk/src/test/resources/log4j.properties ---------------------------------------------------------------------- diff --git a/splunk/src/test/resources/log4j.properties b/splunk/src/test/resources/log4j.properties new file mode 100644 index 0000000..834e2db --- /dev/null +++ b/splunk/src/test/resources/log4j.properties @@ -0,0 +1,24 @@ +# Licensed to the Apache Software Foundation (ASF) under one or more +# contributor license agreements. See the NOTICE file distributed with +# this work for additional information regarding copyright ownership. +# The ASF 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. + +# Root logger is configured at INFO and is sent to A1 +log4j.rootLogger=INFO, A1 + +# A1 goes to the console +log4j.appender.A1=org.apache.log4j.ConsoleAppender + +# Set the pattern for each log message +log4j.appender.A1.layout=org.apache.log4j.PatternLayout +log4j.appender.A1.layout.ConversionPattern=%d [%t] %-5p - %m%n http://git-wip-us.apache.org/repos/asf/calcite/blob/05a57992/src/main/config/checkstyle/suppressions.xml ---------------------------------------------------------------------- diff --git a/src/main/config/checkstyle/suppressions.xml b/src/main/config/checkstyle/suppressions.xml index e4aaead..e0cc66a 100644 --- a/src/main/config/checkstyle/suppressions.xml +++ b/src/main/config/checkstyle/suppressions.xml @@ -28,6 +28,7 @@ limitations under the License. <suppress checks=".*" files="trace.properties"/> <suppress checks=".*" files="release.properties"/> <suppress checks=".*" files="avatica[/\\]src[/\\]main[/\\]java[/\\]org[/\\]apache[/\\]calcite[/\\]avatica[/\\]proto"/> + <suppress checks=".*" files="log4j.properties"/> <!-- This file triggers https://github.com/checkstyle/checkstyle/issues/92, through no fault of its own. -->
