Repository: ignite Updated Branches: refs/heads/master 5f23f85a6 -> 6ab2cc38d
IGNITE-7284: Introduce DEV_ONLY marker to IgniteLogger. Fixes #3346. Signed-off-by: Valentin Kulichenko <[email protected]> Project: http://git-wip-us.apache.org/repos/asf/ignite/repo Commit: http://git-wip-us.apache.org/repos/asf/ignite/commit/edc5a5f3 Tree: http://git-wip-us.apache.org/repos/asf/ignite/tree/edc5a5f3 Diff: http://git-wip-us.apache.org/repos/asf/ignite/diff/edc5a5f3 Branch: refs/heads/master Commit: edc5a5f3cb79104b65dd0d95db10d70ab7da24db Parents: 5f23f85 Author: Stanislav Lukyanov <[email protected]> Authored: Thu Jan 18 17:29:46 2018 -0800 Committer: Valentin Kulichenko <[email protected]> Committed: Thu Jan 18 17:29:46 2018 -0800 ---------------------------------------------------------------------- config/ignite-log4j2.xml | 6 +- .../java/org/apache/ignite/IgniteLogger.java | 102 ++++++++++++++--- .../apache/ignite/IgniteSystemProperties.java | 5 + .../apache/ignite/internal/GridLoggerProxy.java | 25 +++++ .../internal/binary/BinaryClassDescriptor.java | 2 +- .../processors/query/GridQueryProcessor.java | 4 +- .../ignite/internal/util/IgniteUtils.java | 24 ++++ modules/core/src/test/config/log4j2-test.xml | 6 +- .../src/test/config/log4j2-verbose-test.xml | 4 +- .../internal/util/IgniteDevOnlyLogTest.java | 105 ++++++++++++++++++ modules/log4j2/pom.xml | 4 +- .../ignite/logger/log4j2/Log4J2Logger.java | 45 ++++++-- .../log4j2/src/test/config/log4j2-markers.xml | 38 +++++++ .../logger/log4j2/Log4j2LoggerMarkerTest.java | 110 +++++++++++++++++++ .../testsuites/IgniteLog4j2TestSuite.java | 6 +- modules/slf4j/pom.xml | 22 ++++ .../apache/ignite/logger/slf4j/Slf4jLogger.java | 44 ++++++-- .../logger/slf4j/Slf4jLoggerMarkerTest.java | 108 ++++++++++++++++++ .../ignite/testsuites/IgniteSlf4jTestSuite.java | 37 +++++++ .../slf4j/src/test/resources/log4j2-test.xml | 38 +++++++ parent/pom.xml | 1 + 21 files changed, 684 insertions(+), 52 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/ignite/blob/edc5a5f3/config/ignite-log4j2.xml ---------------------------------------------------------------------- diff --git a/config/ignite-log4j2.xml b/config/ignite-log4j2.xml index 2c88e57..7154ae8 100644 --- a/config/ignite-log4j2.xml +++ b/config/ignite-log4j2.xml @@ -20,12 +20,12 @@ <Configuration> <Appenders> <Console name="CONSOLE" target="SYSTEM_OUT"> - <PatternLayout pattern="[%d{ISO8601}][%-5p][%t][%c{1}] %m%n"/> + <PatternLayout pattern="[%d{ISO8601}][%-5p][%t][%c{1}]%notEmpty{[%markerSimpleName]} %m%n"/> <ThresholdFilter level="ERROR" onMatch="DENY" onMismatch="ACCEPT"/> </Console> <Console name="CONSOLE_ERR" target="SYSTEM_ERR"> - <PatternLayout pattern="[%d{ISO8601}][%-5p][%t][%c{1}] %m%n"/> + <PatternLayout pattern="[%d{ISO8601}][%-5p][%t][%c{1}]%notEmpty{[%markerSimpleName]} %m%n"/> </Console> <Routing name="FILE"> @@ -33,7 +33,7 @@ <Route> <RollingFile name="Rolling-${sys:nodeId}" fileName="${sys:IGNITE_HOME}/work/log/ignite-${sys:nodeId}.log" filePattern="${sys:IGNITE_HOME}/work/log/ignite-${sys:nodeId}-%i-%d{yyyy-MM-dd}.log.gz"> - <PatternLayout pattern="[%d{ISO8601}][%-5p][%t][%c{1}] %m%n"/> + <PatternLayout pattern="[%d{ISO8601}][%-5p][%t][%c{1}]%notEmpty{[%markerSimpleName]} %m%n"/> <Policies> <TimeBasedTriggeringPolicy interval="6" modulate="true" /> <SizeBasedTriggeringPolicy size="10 MB" /> http://git-wip-us.apache.org/repos/asf/ignite/blob/edc5a5f3/modules/core/src/main/java/org/apache/ignite/IgniteLogger.java ---------------------------------------------------------------------- diff --git a/modules/core/src/main/java/org/apache/ignite/IgniteLogger.java b/modules/core/src/main/java/org/apache/ignite/IgniteLogger.java index b1433a8..0f5e4aa 100644 --- a/modules/core/src/main/java/org/apache/ignite/IgniteLogger.java +++ b/modules/core/src/main/java/org/apache/ignite/IgniteLogger.java @@ -66,96 +66,172 @@ import org.jetbrains.annotations.Nullable; @GridToStringExclude public interface IgniteLogger { /** + * Marker for log messages that are useful in development environments, but not in production. + */ + String DEV_ONLY = "DEV_ONLY"; + + /** * Creates new logger with given category based off the current instance. * * @param ctgr Category for new logger. * @return New logger with given category. */ - public IgniteLogger getLogger(Object ctgr); + IgniteLogger getLogger(Object ctgr); + + /** + * Logs out trace message. + * + * @param msg Trace message. + */ + void trace(String msg); /** * Logs out trace message. * + * @implSpec + * The default implementation calls {@code this.trace(msg)}. + * + * @param marker Name of the marker to be associated with the message. * @param msg Trace message. */ - public void trace(String msg); + default void trace(@Nullable String marker, String msg) { + trace(msg); + } /** * Logs out debug message. * * @param msg Debug message. */ - public void debug(String msg); + void debug(String msg); + + /** + * Logs out debug message. + * + * @implSpec + * The default implementation calls {@code this.debug(msg)}. + * + * @param marker Name of the marker to be associated with the message. + * @param msg Debug message. + */ + default void debug(@Nullable String marker, String msg) { + debug(msg); + } + + /** + * Logs out information message. + * + * @param msg Information message. + */ + void info(String msg); /** * Logs out information message. * + * @implSpec + * The default implementation calls {@code this.info(msg)}. + * + * @param marker Name of the marker to be associated with the message. * @param msg Information message. */ - public void info(String msg); + default void info(@Nullable String marker, String msg) { + info(msg); + } /** * Logs out warning message. * * @param msg Warning message. */ - public void warning(String msg); + default void warning(String msg) { + warning(msg, null); + } + + /** + * Logs out warning message with optional exception. + * + * @param msg Warning message. + * @param e Optional exception (can be {@code null}). + */ + void warning(String msg, @Nullable Throwable e); /** * Logs out warning message with optional exception. * + * @implSpec + * The default implementation calls {@code this.warning(msg)}. + * + * @param marker Name of the marker to be associated with the message. * @param msg Warning message. * @param e Optional exception (can be {@code null}). */ - public void warning(String msg, @Nullable Throwable e); + default void warning(@Nullable String marker, String msg, @Nullable Throwable e) { + warning(msg, e); + } /** * Logs out error message. * * @param msg Error message. */ - public void error(String msg); + default void error(String msg) { + error(null, msg, null); + } + + /** + * Logs error message with optional exception. + * + * @param msg Error message. + * @param e Optional exception (can be {@code null}). + */ + void error(String msg, @Nullable Throwable e); /** * Logs error message with optional exception. * + * @implSpec + * The default implementation calls {@code this.error(msg)}. + * + * @param marker Name of the marker to be associated with the message. * @param msg Error message. * @param e Optional exception (can be {@code null}). */ - public void error(String msg, @Nullable Throwable e); + default void error(@Nullable String marker, String msg, @Nullable Throwable e) { + error(msg, e); + } /** * Tests whether {@code trace} level is enabled. * * @return {@code true} in case when {@code trace} level is enabled, {@code false} otherwise. */ - public boolean isTraceEnabled(); + boolean isTraceEnabled(); /** * Tests whether {@code debug} level is enabled. * * @return {@code true} in case when {@code debug} level is enabled, {@code false} otherwise. */ - public boolean isDebugEnabled(); + boolean isDebugEnabled(); /** * Tests whether {@code info} level is enabled. * * @return {@code true} in case when {@code info} level is enabled, {@code false} otherwise. */ - public boolean isInfoEnabled(); + boolean isInfoEnabled(); /** * Tests whether Logger is in "Quiet mode". * * @return {@code true} "Quiet mode" is enabled, {@code false} otherwise */ - public boolean isQuiet(); + boolean isQuiet(); /** * Gets name of the file being logged to if one is configured or {@code null} otherwise. * * @return Name of the file being logged to if one is configured or {@code null} otherwise. */ - public String fileName(); + String fileName(); } http://git-wip-us.apache.org/repos/asf/ignite/blob/edc5a5f3/modules/core/src/main/java/org/apache/ignite/IgniteSystemProperties.java ---------------------------------------------------------------------- diff --git a/modules/core/src/main/java/org/apache/ignite/IgniteSystemProperties.java b/modules/core/src/main/java/org/apache/ignite/IgniteSystemProperties.java index 833773a..9cd031d 100644 --- a/modules/core/src/main/java/org/apache/ignite/IgniteSystemProperties.java +++ b/modules/core/src/main/java/org/apache/ignite/IgniteSystemProperties.java @@ -816,6 +816,11 @@ public final class IgniteSystemProperties { */ public static final String IGNITE_DIRECT_IO_ENABLED = "IGNITE_DIRECT_IO_ENABLED"; + /** + * When set to {@code true}, warnings that are intended for development environments and not for production + * (such as coding mistakes in code using Ignite) will not be logged. + */ + public static final String IGNITE_DEV_ONLY_LOGGING_DISABLED = "IGNITE_DEV_ONLY_LOGGING_DISABLED"; /** * Enforces singleton. http://git-wip-us.apache.org/repos/asf/ignite/blob/edc5a5f3/modules/core/src/main/java/org/apache/ignite/internal/GridLoggerProxy.java ---------------------------------------------------------------------- diff --git a/modules/core/src/main/java/org/apache/ignite/internal/GridLoggerProxy.java b/modules/core/src/main/java/org/apache/ignite/internal/GridLoggerProxy.java index fc49b96..4b3befc 100644 --- a/modules/core/src/main/java/org/apache/ignite/internal/GridLoggerProxy.java +++ b/modules/core/src/main/java/org/apache/ignite/internal/GridLoggerProxy.java @@ -119,16 +119,31 @@ public class GridLoggerProxy implements IgniteLogger, LifecycleAware, Externaliz } /** {@inheritDoc} */ + @Override public void trace(@Nullable String marker, String msg) { + impl.trace(marker, enrich(msg)); + } + + /** {@inheritDoc} */ @Override public void debug(String msg) { impl.debug(enrich(msg)); } /** {@inheritDoc} */ + @Override public void debug(@Nullable String marker, String msg) { + impl.debug(marker, enrich(msg)); + } + + /** {@inheritDoc} */ @Override public void info(String msg) { impl.info(enrich(msg)); } /** {@inheritDoc} */ + @Override public void info(@Nullable String marker, String msg) { + impl.info(marker, enrich(msg)); + } + + /** {@inheritDoc} */ @Override public void warning(String msg) { impl.warning(enrich(msg)); } @@ -139,6 +154,11 @@ public class GridLoggerProxy implements IgniteLogger, LifecycleAware, Externaliz } /** {@inheritDoc} */ + @Override public void warning(@Nullable String marker, String msg, @Nullable Throwable e) { + impl.warning(marker, enrich(msg), e); + } + + /** {@inheritDoc} */ @Override public void error(String msg) { impl.error(enrich(msg)); } @@ -149,6 +169,11 @@ public class GridLoggerProxy implements IgniteLogger, LifecycleAware, Externaliz } /** {@inheritDoc} */ + @Override public void error(@Nullable String marker, String msg, @Nullable Throwable e) { + impl.error(marker, enrich(msg), e); + } + + /** {@inheritDoc} */ @Override public boolean isTraceEnabled() { return impl.isTraceEnabled(); } http://git-wip-us.apache.org/repos/asf/ignite/blob/edc5a5f3/modules/core/src/main/java/org/apache/ignite/internal/binary/BinaryClassDescriptor.java ---------------------------------------------------------------------- diff --git a/modules/core/src/main/java/org/apache/ignite/internal/binary/BinaryClassDescriptor.java b/modules/core/src/main/java/org/apache/ignite/internal/binary/BinaryClassDescriptor.java index 2056566..3e75982 100644 --- a/modules/core/src/main/java/org/apache/ignite/internal/binary/BinaryClassDescriptor.java +++ b/modules/core/src/main/java/org/apache/ignite/internal/binary/BinaryClassDescriptor.java @@ -188,7 +188,7 @@ public class BinaryClassDescriptor { } if (useOptMarshaller && userType && !U.isIgnite(cls) && !U.isJdk(cls) && !QueryUtils.isGeometryClass(cls)) { - U.warn(ctx.log(), "Class \"" + cls.getName() + "\" cannot be serialized using " + + U.warnDevOnly(ctx.log(), "Class \"" + cls.getName() + "\" cannot be serialized using " + BinaryMarshaller.class.getSimpleName() + " because it either implements Externalizable interface " + "or have writeObject/readObject methods. " + OptimizedMarshaller.class.getSimpleName() + " will be " + "used instead and class instances will be deserialized on the server. Please ensure that all nodes " + http://git-wip-us.apache.org/repos/asf/ignite/blob/edc5a5f3/modules/core/src/main/java/org/apache/ignite/internal/processors/query/GridQueryProcessor.java ---------------------------------------------------------------------- diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/query/GridQueryProcessor.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/query/GridQueryProcessor.java index 3bbe8f1..165e450 100644 --- a/modules/core/src/main/java/org/apache/ignite/internal/processors/query/GridQueryProcessor.java +++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/query/GridQueryProcessor.java @@ -64,9 +64,7 @@ import org.apache.ignite.internal.processors.cache.CacheObjectContext; import org.apache.ignite.internal.processors.cache.DynamicCacheDescriptor; import org.apache.ignite.internal.processors.cache.GridCacheAdapter; import org.apache.ignite.internal.processors.cache.GridCacheContext; -import org.apache.ignite.internal.processors.cache.GridCacheSharedContext; import org.apache.ignite.internal.processors.cache.KeyCacheObject; -import org.apache.ignite.internal.processors.cache.StoredCacheData; import org.apache.ignite.internal.processors.cache.persistence.CacheDataRow; import org.apache.ignite.internal.processors.cache.query.CacheQueryFuture; import org.apache.ignite.internal.processors.cache.query.CacheQueryType; @@ -800,7 +798,7 @@ public class GridQueryProcessor extends GridProcessorAdapter { // Warn about possible implicit deserialization. if (!mustDeserializeClss.isEmpty()) { - U.warn(log, "Some classes in query configuration cannot be written in binary format " + + U.warnDevOnly(log, "Some classes in query configuration cannot be written in binary format " + "because they either implement Externalizable interface or have writeObject/readObject " + "methods. Instances of these classes will be deserialized in order to build indexes. Please " + "ensure that all nodes have these classes in classpath. To enable binary serialization " + http://git-wip-us.apache.org/repos/asf/ignite/blob/edc5a5f3/modules/core/src/main/java/org/apache/ignite/internal/util/IgniteUtils.java ---------------------------------------------------------------------- diff --git a/modules/core/src/main/java/org/apache/ignite/internal/util/IgniteUtils.java b/modules/core/src/main/java/org/apache/ignite/internal/util/IgniteUtils.java index c522572..523939b 100755 --- a/modules/core/src/main/java/org/apache/ignite/internal/util/IgniteUtils.java +++ b/modules/core/src/main/java/org/apache/ignite/internal/util/IgniteUtils.java @@ -4272,6 +4272,30 @@ public abstract class IgniteUtils { /** * Depending on whether or not log is provided and quiet mode is enabled logs given + * messages as quiet message or normal log WARN message with {@link IgniteLogger#DEV_ONLY DEV_ONLY} marker. + * If {@code log} is {@code null} or in QUIET mode it will add {@code (wrn)} prefix to the message. + * If property {@link IgniteSystemProperties#IGNITE_DEV_ONLY_LOGGING_DISABLED IGNITE_DEV_ONLY_LOGGING_DISABLED} + * is set to true, the message will not be logged. + * + * @param log Optional logger to use when QUIET mode is not enabled. + * @param msg Message to log. + */ + public static void warnDevOnly(@Nullable IgniteLogger log, Object msg) { + assert msg != null; + + // don't log message if DEV_ONLY messages are disabled + if (IgniteSystemProperties.getBoolean(IgniteSystemProperties.IGNITE_DEV_ONLY_LOGGING_DISABLED)) + return; + + if (log != null) + log.warning(IgniteLogger.DEV_ONLY, compact(msg.toString()), null); + else + X.println("[" + SHORT_DATE_FMT.format(new java.util.Date()) + "] (wrn) " + + compact(msg.toString())); + } + + /** + * Depending on whether or not log is provided and quiet mode is enabled logs given * messages as quiet message or normal log INFO message. * <p> * <b>NOTE:</b> unlike the normal logging when INFO level may not be enabled and http://git-wip-us.apache.org/repos/asf/ignite/blob/edc5a5f3/modules/core/src/test/config/log4j2-test.xml ---------------------------------------------------------------------- diff --git a/modules/core/src/test/config/log4j2-test.xml b/modules/core/src/test/config/log4j2-test.xml index 81b14a8..8b46f00 100644 --- a/modules/core/src/test/config/log4j2-test.xml +++ b/modules/core/src/test/config/log4j2-test.xml @@ -20,12 +20,12 @@ <Configuration> <Appenders> <Console name="CONSOLE" target="SYSTEM_OUT"> - <PatternLayout pattern="[%d{ISO8601}][%-5p][%t][%c{1}] %m%n"/> + <PatternLayout pattern="[%d{ISO8601}][%-5p][%t][%c{1}]%notEmpty{[%markerSimpleName]} %m%n"/> <ThresholdFilter level="ERROR" onMatch="DENY" onMismatch="ACCEPT"/> </Console> <Console name="CONSOLE_ERR" target="SYSTEM_ERR"> - <PatternLayout pattern="[%d{ISO8601}][%-5p][%t][%c{1}] %m%n"/> + <PatternLayout pattern="[%d{ISO8601}][%-5p][%t][%c{1}]%notEmpty{[%markerSimpleName]} %m%n"/> </Console> <Routing name="FILE"> @@ -33,7 +33,7 @@ <Route> <RollingFile name="Rolling-${sys:nodeId}" fileName="${sys:IGNITE_HOME}/work/log/ignite-${sys:nodeId}.log" filePattern="${sys:IGNITE_HOME}/work/log/ignite-${sys:nodeId}-%i-%d{yyyy-MM-dd}.log.gz"> - <PatternLayout pattern="[%d{ISO8601}][%-5p][%t][%c{1}] %m%n"/> + <PatternLayout pattern="[%d{ISO8601}][%-5p][%t][%c{1}]%notEmpty{[%markerSimpleName]} %m%n"/> <Policies> <TimeBasedTriggeringPolicy interval="6" modulate="true" /> <SizeBasedTriggeringPolicy size="10 MB" /> http://git-wip-us.apache.org/repos/asf/ignite/blob/edc5a5f3/modules/core/src/test/config/log4j2-verbose-test.xml ---------------------------------------------------------------------- diff --git a/modules/core/src/test/config/log4j2-verbose-test.xml b/modules/core/src/test/config/log4j2-verbose-test.xml index 50366d3..ff6325b 100644 --- a/modules/core/src/test/config/log4j2-verbose-test.xml +++ b/modules/core/src/test/config/log4j2-verbose-test.xml @@ -20,7 +20,7 @@ <Configuration> <Appenders> <Console name="CONSOLE_ERR" target="SYSTEM_ERR"> - <PatternLayout pattern="[%d{ISO8601}][%-5p][%t][%c{1}] %m%n"/> + <PatternLayout pattern="[%d{ISO8601}][%-5p][%t][%c{1}]%notEmpty{[%markerSimpleName]} %m%n"/> </Console> <Routing name="FILE"> @@ -28,7 +28,7 @@ <Route> <RollingFile name="Rolling-${sys:nodeId}" fileName="${sys:IGNITE_HOME}/work/log/ignite-${sys:nodeId}.log" filePattern="${sys:IGNITE_HOME}/work/log/ignite-${sys:nodeId}-%i-%d{yyyy-MM-dd}.log.gz"> - <PatternLayout pattern="[%d{ISO8601}][%-5p][%t][%c{1}] %m%n"/> + <PatternLayout pattern="[%d{ISO8601}][%-5p][%t][%c{1}]%notEmpty{[%markerSimpleName]} %m%n"/> <Policies> <TimeBasedTriggeringPolicy interval="6" modulate="true" /> <SizeBasedTriggeringPolicy size="10 MB" /> http://git-wip-us.apache.org/repos/asf/ignite/blob/edc5a5f3/modules/core/src/test/java/org/apache/ignite/internal/util/IgniteDevOnlyLogTest.java ---------------------------------------------------------------------- diff --git a/modules/core/src/test/java/org/apache/ignite/internal/util/IgniteDevOnlyLogTest.java b/modules/core/src/test/java/org/apache/ignite/internal/util/IgniteDevOnlyLogTest.java new file mode 100644 index 0000000..d769c96 --- /dev/null +++ b/modules/core/src/test/java/org/apache/ignite/internal/util/IgniteDevOnlyLogTest.java @@ -0,0 +1,105 @@ +/* @java.file.header */ + +/* _________ _____ __________________ _____ + * __ ____/___________(_)______ /__ ____/______ ____(_)_______ + * _ / __ __ ___/__ / _ __ / _ / __ _ __ `/__ / __ __ \ + * / /_/ / _ / _ / / /_/ / / /_/ / / /_/ / _ / _ / / / + * \____/ /_/ /_/ \_,__/ \____/ \__,_/ /_/ /_/ /_/ + */ + +package org.apache.ignite.internal.util; + +import java.io.IOException; +import java.util.Collections; +import junit.framework.TestCase; +import org.apache.ignite.Ignite; +import org.apache.ignite.IgniteLogger; +import org.apache.ignite.IgniteSystemProperties; +import org.apache.ignite.Ignition; +import org.apache.ignite.configuration.IgniteConfiguration; +import org.apache.ignite.spi.discovery.tcp.TcpDiscoverySpi; +import org.apache.ignite.spi.discovery.tcp.ipfinder.vm.TcpDiscoveryVmIpFinder; + +/** + * Testing logging via {@link IgniteUtils#warnDevOnly(IgniteLogger, Object)}. + */ +public class IgniteDevOnlyLogTest extends TestCase { + /** Check that dev-only messages appear in the log. */ + public void testDevOnlyQuietMessage() throws IOException { + String oldQuietVal = System.setProperty(IgniteSystemProperties.IGNITE_QUIET, "true"); + + try (Ignite ignite = startNode()) { + String msg = getMessage(ignite); + IgniteUtils.warnDevOnly(ignite.log(), msg); + assertTrue(readLog(ignite).contains(msg)); + } + finally { + setOrClearProperty(IgniteSystemProperties.IGNITE_QUIET, oldQuietVal); + } + } + + /** Check that dev-only messages appear in the log. */ + public void testDevOnlyVerboseMessage() throws IOException { + String oldQuietVal = System.setProperty(IgniteSystemProperties.IGNITE_QUIET, "false"); + + try (Ignite ignite = startNode()) { + String msg = getMessage(ignite); + IgniteUtils.warnDevOnly(ignite.log(), msg); + assertTrue(readLog(ignite).contains(msg)); + } + finally { + setOrClearProperty(IgniteSystemProperties.IGNITE_QUIET, oldQuietVal); + } + } + + /** + * Check that {@link IgniteUtils#warnDevOnly(IgniteLogger, Object)} + * doesn't print anything if {@link org.apache.ignite.IgniteSystemProperties#IGNITE_DEV_ONLY_LOGGING_DISABLED} + * is set to {@code true}. + */ + public void testDevOnlyDisabledProperty() throws IOException { + String oldDevOnlyVal = System.setProperty(IgniteSystemProperties.IGNITE_DEV_ONLY_LOGGING_DISABLED, "true"); + + try (Ignite ignite = startNode()) { + String msg = getMessage(ignite); + IgniteUtils.warnDevOnly(ignite.log(), msg); + assertFalse(readLog(ignite).contains(msg)); + } + finally { + setOrClearProperty(IgniteSystemProperties.IGNITE_DEV_ONLY_LOGGING_DISABLED, oldDevOnlyVal); + } + + } + + /** Sets a system property if the value is not null, or clears it if the value is null. */ + private void setOrClearProperty(String key, String val) { + if (val != null) + System.setProperty(key, val); + else + System.clearProperty(IgniteSystemProperties.IGNITE_QUIET); + } + + /** Starts an Ignite node. */ + private Ignite startNode() throws IOException { + IgniteConfiguration configuration = new IgniteConfiguration() + .setIgniteInstanceName(IgniteDevOnlyLogTest.class.getName() + "Instance") + .setDiscoverySpi(new TcpDiscoverySpi() + .setIpFinder(new TcpDiscoveryVmIpFinder() + .setAddresses(Collections.singletonList("127.0.0.1:47500..47509")) + ) + ); + + return Ignition.start(configuration); + } + + /** Reads log of the given node to a string. */ + private String readLog(Ignite ignite) throws IOException { + return IgniteUtils.readFileToString(ignite.log().fileName(), "UTF-8"); + } + + /** Returns a test message. */ + private String getMessage(Ignite ignite) { + // use node id in the message to avoid interference with other tests + return "My id is " + ignite.cluster().localNode().id(); + } +} http://git-wip-us.apache.org/repos/asf/ignite/blob/edc5a5f3/modules/log4j2/pom.xml ---------------------------------------------------------------------- diff --git a/modules/log4j2/pom.xml b/modules/log4j2/pom.xml index b0d7179..574700a 100644 --- a/modules/log4j2/pom.xml +++ b/modules/log4j2/pom.xml @@ -52,13 +52,13 @@ <dependency> <groupId>org.apache.logging.log4j</groupId> <artifactId>log4j-api</artifactId> - <version>2.8.1</version> + <version>${log4j.version}</version> </dependency> <dependency> <groupId>org.apache.logging.log4j</groupId> <artifactId>log4j-core</artifactId> - <version>2.8.1</version> + <version>${log4j.version}</version> </dependency> </dependencies> http://git-wip-us.apache.org/repos/asf/ignite/blob/edc5a5f3/modules/log4j2/src/main/java/org/apache/ignite/logger/log4j2/Log4J2Logger.java ---------------------------------------------------------------------- diff --git a/modules/log4j2/src/main/java/org/apache/ignite/logger/log4j2/Log4J2Logger.java b/modules/log4j2/src/main/java/org/apache/ignite/logger/log4j2/Log4J2Logger.java index ee5d9a5..0f5c313 100644 --- a/modules/log4j2/src/main/java/org/apache/ignite/logger/log4j2/Log4J2Logger.java +++ b/modules/log4j2/src/main/java/org/apache/ignite/logger/log4j2/Log4J2Logger.java @@ -26,7 +26,6 @@ import java.util.UUID; import org.apache.ignite.IgniteCheckedException; import org.apache.ignite.IgniteLogger; import org.apache.ignite.internal.util.tostring.GridToStringExclude; -import org.apache.ignite.internal.util.tostring.GridToStringInclude; import org.apache.ignite.internal.util.typedef.C1; import org.apache.ignite.internal.util.typedef.internal.A; import org.apache.ignite.internal.util.typedef.internal.S; @@ -35,6 +34,8 @@ import org.apache.ignite.lang.IgniteClosure; import org.apache.ignite.logger.LoggerNodeIdAware; import org.apache.logging.log4j.Level; import org.apache.logging.log4j.LogManager; +import org.apache.logging.log4j.Marker; +import org.apache.logging.log4j.MarkerManager; import org.apache.logging.log4j.core.Appender; import org.apache.logging.log4j.core.Logger; import org.apache.logging.log4j.core.LoggerContext; @@ -440,46 +441,66 @@ public class Log4J2Logger implements IgniteLogger, LoggerNodeIdAware { /** {@inheritDoc} */ @Override public void trace(String msg) { + trace(null, msg); + } + + /** {@inheritDoc} */ + @Override public void trace(@Nullable String marker, String msg) { if (!isTraceEnabled()) warning("Logging at TRACE level without checking if TRACE level is enabled: " + msg); - impl.trace(msg); + impl.trace(getMarkerOrNull(marker), msg); } /** {@inheritDoc} */ @Override public void debug(String msg) { + debug(null, msg); + } + + /** {@inheritDoc} */ + @Override public void debug(@Nullable String marker, String msg) { if (!isDebugEnabled()) warning("Logging at DEBUG level without checking if DEBUG level is enabled: " + msg); - impl.debug(msg); + impl.debug(getMarkerOrNull(marker), msg); } /** {@inheritDoc} */ @Override public void info(String msg) { + info(null, msg); + } + + /** {@inheritDoc} */ + @Override public void info(@Nullable String marker, String msg) { if (!isInfoEnabled()) warning("Logging at INFO level without checking if INFO level is enabled: " + msg); - impl.info(msg); + impl.info(getMarkerOrNull(marker), msg); } /** {@inheritDoc} */ - @Override public void warning(String msg) { - impl.warn(msg); + @Override public void warning(String msg, @Nullable Throwable e) { + warning(null, msg, e); } /** {@inheritDoc} */ - @Override public void warning(String msg, @Nullable Throwable e) { - impl.warn(msg, e); + @Override public void warning(@Nullable String marker, String msg, @Nullable Throwable e) { + impl.warn(getMarkerOrNull(marker), msg, e); } /** {@inheritDoc} */ - @Override public void error(String msg) { - impl.error(msg); + @Override public void error(String msg, @Nullable Throwable e) { + error(null, msg, e); } /** {@inheritDoc} */ - @Override public void error(String msg, @Nullable Throwable e) { - impl.error(msg, e); + @Override public void error(@Nullable String marker, String msg, @Nullable Throwable e) { + impl.error(getMarkerOrNull(marker), msg, e); + } + + /** Returns Marker object for the specified name, or null if the name is null */ + private Marker getMarkerOrNull(@Nullable String marker) { + return marker != null ? MarkerManager.getMarker(marker) : null; } /** {@inheritDoc} */ http://git-wip-us.apache.org/repos/asf/ignite/blob/edc5a5f3/modules/log4j2/src/test/config/log4j2-markers.xml ---------------------------------------------------------------------- diff --git a/modules/log4j2/src/test/config/log4j2-markers.xml b/modules/log4j2/src/test/config/log4j2-markers.xml new file mode 100644 index 0000000..f9c5898 --- /dev/null +++ b/modules/log4j2/src/test/config/log4j2-markers.xml @@ -0,0 +1,38 @@ +<?xml version="1.0" encoding="UTF-8"?> + +<!-- + 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. +--> + +<Configuration> + <Appenders> + <File name="FILTERED" fileName="${sys:IGNITE_HOME}/work/log/filtered.log" append="false"> + <PatternLayout pattern="[%d{ISO8601}][%-5p][%t][%c{1}]%notEmpty{[%markerSimpleName]} %m%n"/> + <MarkerFilter marker="IGNORE_ME" onMatch="DENY" onMismatch="NEUTRAL"/> + </File> + + <File name="ALL" fileName="${sys:IGNITE_HOME}/work/log/all.log" append="false"> + <PatternLayout pattern="[%d{ISO8601}][%-5p]%t][%c{1}]%notEmpty{[%markerSimpleName]} %m%n"/> + </File> + </Appenders> + + <Loggers> + <Root level="TRACE"> + <AppenderRef ref="FILTERED"/> + <AppenderRef ref="ALL"/> + </Root> + </Loggers> +</Configuration> http://git-wip-us.apache.org/repos/asf/ignite/blob/edc5a5f3/modules/log4j2/src/test/java/org/apache/ignite/logger/log4j2/Log4j2LoggerMarkerTest.java ---------------------------------------------------------------------- diff --git a/modules/log4j2/src/test/java/org/apache/ignite/logger/log4j2/Log4j2LoggerMarkerTest.java b/modules/log4j2/src/test/java/org/apache/ignite/logger/log4j2/Log4j2LoggerMarkerTest.java new file mode 100644 index 0000000..672f5d9 --- /dev/null +++ b/modules/log4j2/src/test/java/org/apache/ignite/logger/log4j2/Log4j2LoggerMarkerTest.java @@ -0,0 +1,110 @@ +/* + * 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. + */ + +package org.apache.ignite.logger.log4j2; + +import java.io.File; +import junit.framework.TestCase; +import org.apache.ignite.internal.util.typedef.internal.U; + +/** + * Testing that markers are supported by log4j2 implementation. + */ +public class Log4j2LoggerMarkerTest extends TestCase { + /** Path to log4j configuration. */ + private static final String LOG_CONFIG = "modules/log4j2/src/test/config/log4j2-markers.xml"; + + /** Path to full log. */ + private static final String LOG_ALL = "work/log/all.log"; + + /** Path to filtered log. */ + private static final String LOG_FILTERED = "work/log/filtered.log"; + + /** */ + @Override protected void setUp() throws Exception { + super.setUp(); + + Log4J2Logger.cleanup(); + + deleteLogs(); + } + + /** */ + @Override protected void tearDown() throws Exception { + super.tearDown(); + + deleteLogs(); + } + + /** */ + public void testMarkerFiltering() throws Exception { + // create log + Log4J2Logger log = new Log4J2Logger(LOG_CONFIG); + + // populate log with messages + log.error("IGNORE_ME", "Ignored error", null); + log.warning("IGNORE_ME", "Ignored warning", null); + log.info("IGNORE_ME", "Ignored info"); + log.debug("IGNORE_ME", "Ignored debug"); + log.trace("IGNORE_ME", "Ignored trace"); + + log.error("ACCEPT_ME", "Accepted error", null); + log.warning("ACCEPT_ME", "Accepted warning", null); + log.info("ACCEPT_ME", "Accepted info"); + log.debug("ACCEPT_ME", "Accepted debug"); + log.trace("ACCEPT_ME", "Accepted trace"); + + // check file with all messages + File allFile = U.resolveIgnitePath(LOG_ALL); + assertNotNull(allFile); + String all = U.readFileToString(allFile.getPath(), "UTF-8"); + + assertTrue(all.contains("Ignored error")); + assertTrue(all.contains("Ignored warning")); + assertTrue(all.contains("Ignored info")); + assertTrue(all.contains("Ignored debug")); + assertTrue(all.contains("Ignored trace")); + assertTrue(all.contains("Accepted error")); + assertTrue(all.contains("Accepted warning")); + assertTrue(all.contains("Accepted info")); + assertTrue(all.contains("Accepted debug")); + assertTrue(all.contains("Accepted trace")); + + // check file with one marker filtered out + File filteredFile = U.resolveIgnitePath(LOG_FILTERED); + assertNotNull(filteredFile); + String filtered = U.readFileToString(filteredFile.getPath(), "UTF-8"); + + assertFalse(filtered.contains("Ignored error")); + assertFalse(filtered.contains("Ignored warning")); + assertFalse(filtered.contains("Ignored info")); + assertFalse(filtered.contains("Ignored debug")); + assertFalse(filtered.contains("Ignored trace")); + assertTrue(filtered.contains("Accepted error")); + assertTrue(filtered.contains("Accepted warning")); + assertTrue(filtered.contains("Accepted info")); + assertTrue(filtered.contains("Accepted debug")); + assertTrue(filtered.contains("Accepted trace")); + } + + /** Delete existing logs, if any */ + @SuppressWarnings("ResultOfMethodCallIgnored") + private void deleteLogs() { + new File(LOG_ALL).delete(); + new File(LOG_FILTERED).delete(); + } +} http://git-wip-us.apache.org/repos/asf/ignite/blob/edc5a5f3/modules/log4j2/src/test/java/org/apache/ignite/testsuites/IgniteLog4j2TestSuite.java ---------------------------------------------------------------------- diff --git a/modules/log4j2/src/test/java/org/apache/ignite/testsuites/IgniteLog4j2TestSuite.java b/modules/log4j2/src/test/java/org/apache/ignite/testsuites/IgniteLog4j2TestSuite.java index a23cb47..66270b2 100644 --- a/modules/log4j2/src/test/java/org/apache/ignite/testsuites/IgniteLog4j2TestSuite.java +++ b/modules/log4j2/src/test/java/org/apache/ignite/testsuites/IgniteLog4j2TestSuite.java @@ -18,6 +18,7 @@ package org.apache.ignite.testsuites; import junit.framework.TestSuite; +import org.apache.ignite.logger.log4j2.Log4j2LoggerMarkerTest; import org.apache.ignite.logger.log4j2.Log4j2LoggerSelfTest; import org.apache.ignite.logger.log4j2.Log4j2LoggerVerboseModeSelfTest; @@ -32,8 +33,9 @@ public class IgniteLog4j2TestSuite extends TestSuite { public static TestSuite suite() throws Exception { TestSuite suite = new TestSuite("Log4j2 Logging Test Suite"); - suite.addTest(new TestSuite(Log4j2LoggerSelfTest.class)); - suite.addTest(new TestSuite(Log4j2LoggerVerboseModeSelfTest.class)); + suite.addTestSuite(Log4j2LoggerSelfTest.class); + suite.addTestSuite(Log4j2LoggerVerboseModeSelfTest.class); + suite.addTestSuite(Log4j2LoggerMarkerTest.class); return suite; } http://git-wip-us.apache.org/repos/asf/ignite/blob/edc5a5f3/modules/slf4j/pom.xml ---------------------------------------------------------------------- diff --git a/modules/slf4j/pom.xml b/modules/slf4j/pom.xml index 1e2a5fc..332ff24 100644 --- a/modules/slf4j/pom.xml +++ b/modules/slf4j/pom.xml @@ -46,6 +46,28 @@ <artifactId>slf4j-api</artifactId> <version>${slf4j.version}</version> </dependency> + + <dependency> + <groupId>org.apache.ignite</groupId> + <artifactId>ignite-core</artifactId> + <version>${project.version}</version> + <type>test-jar</type> + <scope>test</scope> + </dependency> + + <dependency> + <groupId>org.apache.logging.log4j</groupId> + <artifactId>log4j-slf4j-impl</artifactId> + <version>${log4j.version}</version> + <scope>test</scope> + </dependency> + + <dependency> + <groupId>org.apache.logging.log4j</groupId> + <artifactId>log4j-core</artifactId> + <version>${log4j.version}</version> + <scope>test</scope> + </dependency> </dependencies> <build> http://git-wip-us.apache.org/repos/asf/ignite/blob/edc5a5f3/modules/slf4j/src/main/java/org/apache/ignite/logger/slf4j/Slf4jLogger.java ---------------------------------------------------------------------- diff --git a/modules/slf4j/src/main/java/org/apache/ignite/logger/slf4j/Slf4jLogger.java b/modules/slf4j/src/main/java/org/apache/ignite/logger/slf4j/Slf4jLogger.java index 2450850..0cc31e4 100644 --- a/modules/slf4j/src/main/java/org/apache/ignite/logger/slf4j/Slf4jLogger.java +++ b/modules/slf4j/src/main/java/org/apache/ignite/logger/slf4j/Slf4jLogger.java @@ -22,6 +22,8 @@ import org.apache.ignite.internal.util.typedef.internal.S; import org.jetbrains.annotations.Nullable; import org.slf4j.Logger; import org.slf4j.LoggerFactory; +import org.slf4j.Marker; +import org.slf4j.MarkerFactory; import static org.apache.ignite.IgniteSystemProperties.IGNITE_QUIET; @@ -78,46 +80,66 @@ public class Slf4jLogger implements IgniteLogger { /** {@inheritDoc} */ @Override public void trace(String msg) { + trace(null, msg); + } + + /** {@inheritDoc} */ + @Override public void trace(@Nullable String marker, String msg) { if (!impl.isTraceEnabled()) warning("Logging at TRACE level without checking if TRACE level is enabled: " + msg); - impl.trace(msg); + impl.trace(getMarkerOrNull(marker), msg); } /** {@inheritDoc} */ @Override public void debug(String msg) { + debug(null, msg); + } + + /** {@inheritDoc} */ + @Override public void debug(@Nullable String marker, String msg) { if (!impl.isDebugEnabled()) warning("Logging at DEBUG level without checking if DEBUG level is enabled: " + msg); - impl.debug(msg); + impl.debug(getMarkerOrNull(marker), msg); } /** {@inheritDoc} */ @Override public void info(String msg) { + info(null, msg); + } + + /** {@inheritDoc} */ + @Override public void info(@Nullable String marker, String msg) { if (!impl.isInfoEnabled()) warning("Logging at INFO level without checking if INFO level is enabled: " + msg); - impl.info(msg); + impl.info(getMarkerOrNull(marker), msg); } /** {@inheritDoc} */ - @Override public void warning(String msg) { - impl.warn(msg); + @Override public void warning(String msg, @Nullable Throwable e) { + warning(null, msg, e); } /** {@inheritDoc} */ - @Override public void warning(String msg, @Nullable Throwable e) { - impl.warn(msg, e); + @Override public void warning(@Nullable String marker, String msg, @Nullable Throwable e) { + impl.warn(getMarkerOrNull(marker), msg, e); } /** {@inheritDoc} */ - @Override public void error(String msg) { - impl.error(msg); + @Override public void error(String msg, @Nullable Throwable e) { + error(null, msg, e); } /** {@inheritDoc} */ - @Override public void error(String msg, @Nullable Throwable e) { - impl.error(msg, e); + @Override public void error(@Nullable String marker, String msg, @Nullable Throwable e) { + impl.error(getMarkerOrNull(marker), msg, e); + } + + /** Returns Marker object for the specified name, or null if the name is null */ + private Marker getMarkerOrNull(@Nullable String marker) { + return marker != null ? MarkerFactory.getMarker(marker) : null; } /** {@inheritDoc} */ http://git-wip-us.apache.org/repos/asf/ignite/blob/edc5a5f3/modules/slf4j/src/test/java/org/apache/ignite/logger/slf4j/Slf4jLoggerMarkerTest.java ---------------------------------------------------------------------- diff --git a/modules/slf4j/src/test/java/org/apache/ignite/logger/slf4j/Slf4jLoggerMarkerTest.java b/modules/slf4j/src/test/java/org/apache/ignite/logger/slf4j/Slf4jLoggerMarkerTest.java new file mode 100644 index 0000000..578e6ba --- /dev/null +++ b/modules/slf4j/src/test/java/org/apache/ignite/logger/slf4j/Slf4jLoggerMarkerTest.java @@ -0,0 +1,108 @@ +/* + * 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. + */ + +package org.apache.ignite.logger.slf4j; + +import java.io.File; +import junit.framework.TestCase; +import org.apache.ignite.internal.util.typedef.internal.U; +import org.slf4j.LoggerFactory; + +/** + * Testing that markers are supported by log4j2 implementation. + */ +public class Slf4jLoggerMarkerTest extends TestCase { + /** Path to full log. */ + private static final String LOG_ALL = "work/log/all.log"; + + /** Path to filtered log. */ + private static final String LOG_FILTERED = "work/log/filtered.log"; + + /** */ + @Override protected void setUp() throws Exception { + super.setUp(); + + deleteLogs(); + } + + /** */ + @Override protected void tearDown() throws Exception { + super.tearDown(); + + deleteLogs(); + } + + /** */ + public void testMarkerFiltering() throws Exception { + // create log + Slf4jLogger log = new Slf4jLogger(LoggerFactory.getLogger(Slf4jLoggerMarkerTest.class)); + + // populate log with messages + log.error("IGNORE_ME", "Ignored error", null); + log.warning("IGNORE_ME", "Ignored warning", null); + log.info("IGNORE_ME", "Ignored info"); + log.debug("IGNORE_ME", "Ignored debug"); + log.trace("IGNORE_ME", "Ignored trace"); + + log.error("ACCEPT_ME", "Accepted error", null); + log.warning("ACCEPT_ME", "Accepted warning", null); + log.info("ACCEPT_ME", "Accepted info"); + log.debug("ACCEPT_ME", "Accepted debug"); + log.trace("ACCEPT_ME", "Accepted trace"); + + // check file with all messages + File allFile = U.resolveIgnitePath(LOG_ALL); + assertNotNull(allFile); + String all = U.readFileToString(allFile.getPath(), "UTF-8"); + + assertTrue(all.contains("[IGNORE_ME] Ignored error")); + assertTrue(all.contains("[IGNORE_ME] Ignored warning")); + assertTrue(all.contains("[IGNORE_ME] Ignored info")); + assertTrue(all.contains("[IGNORE_ME] Ignored debug")); + assertTrue(all.contains("[IGNORE_ME] Ignored trace")); + + assertTrue(all.contains("[ACCEPT_ME] Accepted error")); + assertTrue(all.contains("[ACCEPT_ME] Accepted warning")); + assertTrue(all.contains("[ACCEPT_ME] Accepted info")); + assertTrue(all.contains("[ACCEPT_ME] Accepted debug")); + assertTrue(all.contains("[ACCEPT_ME] Accepted trace")); + + // check file with one marker filtered out + File filteredFile = U.resolveIgnitePath(LOG_FILTERED); + assertNotNull(filteredFile); + String filtered = U.readFileToString(filteredFile.getPath(), "UTF-8"); + + assertFalse(filtered.contains("[IGNORE_ME] Ignored error")); + assertFalse(filtered.contains("[IGNORE_ME] Ignored warning")); + assertFalse(filtered.contains("[IGNORE_ME] Ignored info")); + assertFalse(filtered.contains("[IGNORE_ME] Ignored debug")); + assertFalse(filtered.contains("[IGNORE_ME] Ignored trace")); + + assertTrue(filtered.contains("[ACCEPT_ME] Accepted error")); + assertTrue(filtered.contains("[ACCEPT_ME] Accepted warning")); + assertTrue(filtered.contains("[ACCEPT_ME] Accepted info")); + assertTrue(filtered.contains("[ACCEPT_ME] Accepted debug")); + assertTrue(filtered.contains("[ACCEPT_ME] Accepted trace")); + } + + /** Delete existing logs, if any */ + @SuppressWarnings("ResultOfMethodCallIgnored") + private void deleteLogs() { + new File(LOG_ALL).delete(); + new File(LOG_FILTERED).delete(); + } +} http://git-wip-us.apache.org/repos/asf/ignite/blob/edc5a5f3/modules/slf4j/src/test/java/org/apache/ignite/testsuites/IgniteSlf4jTestSuite.java ---------------------------------------------------------------------- diff --git a/modules/slf4j/src/test/java/org/apache/ignite/testsuites/IgniteSlf4jTestSuite.java b/modules/slf4j/src/test/java/org/apache/ignite/testsuites/IgniteSlf4jTestSuite.java new file mode 100644 index 0000000..8668f92 --- /dev/null +++ b/modules/slf4j/src/test/java/org/apache/ignite/testsuites/IgniteSlf4jTestSuite.java @@ -0,0 +1,37 @@ +/* + * 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. + */ + +package org.apache.ignite.testsuites; + +import junit.framework.TestSuite; +import org.apache.ignite.logger.slf4j.Slf4jLoggerMarkerTest; + +/** + * Slf4j logging tests. + */ +public class IgniteSlf4jTestSuite extends TestSuite { + /** + * @return Test suite. + */ + public static TestSuite suite() { + TestSuite suite = new TestSuite("Slf4j Logging Test Suite"); + + suite.addTestSuite(Slf4jLoggerMarkerTest.class); + + return suite; + } +} http://git-wip-us.apache.org/repos/asf/ignite/blob/edc5a5f3/modules/slf4j/src/test/resources/log4j2-test.xml ---------------------------------------------------------------------- diff --git a/modules/slf4j/src/test/resources/log4j2-test.xml b/modules/slf4j/src/test/resources/log4j2-test.xml new file mode 100644 index 0000000..d30736e --- /dev/null +++ b/modules/slf4j/src/test/resources/log4j2-test.xml @@ -0,0 +1,38 @@ +<?xml version="1.0" encoding="UTF-8"?> + +<!-- + 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. +--> + +<Configuration> + <Appenders> + <File name="FILTERED" fileName="work/log/filtered.log" append="false"> + <PatternLayout pattern="[%d{ISO8601}][%-5p][%t][%c{1}]%notEmpty{[%markerSimpleName]} %m%n"/> + <MarkerFilter marker="IGNORE_ME" onMatch="DENY" onMismatch="NEUTRAL"/> + </File> + + <File name="ALL" fileName="work/log/all.log" append="false"> + <PatternLayout pattern="[%d{ISO8601}][%-5p][%t][%c{1}]%notEmpty{[%markerSimpleName]} %m%n"/> + </File> + </Appenders> + + <Loggers> + <Root level="TRACE"> + <AppenderRef ref="FILTERED"/> + <AppenderRef ref="ALL"/> + </Root> + </Loggers> +</Configuration> http://git-wip-us.apache.org/repos/asf/ignite/blob/edc5a5f3/parent/pom.xml ---------------------------------------------------------------------- diff --git a/parent/pom.xml b/parent/pom.xml index 26339af..0ec294a 100644 --- a/parent/pom.xml +++ b/parent/pom.xml @@ -91,6 +91,7 @@ <jtidy.version>r938</jtidy.version> <kafka.version>0.10.0.1</kafka.version> <karaf.version>4.0.2</karaf.version> + <log4j.version>2.8.1</log4j.version> <lucene.bundle.version>5.5.2_1</lucene.bundle.version> <lucene.version>5.5.2</lucene.version> <maven.bundle.plugin.version>2.5.4</maven.bundle.plugin.version>
