JSIEVE-112 Replace commons-logging by slf4j
diff --git a/core/pom.xml b/core/pom.xml
index ba74dbb..1c966b6 100644
--- a/core/pom.xml
+++ b/core/pom.xml
@@ -52,8 +52,8 @@
             <artifactId>apache-mime4j-core</artifactId>
         </dependency>
         <dependency>
-            <groupId>commons-logging</groupId>
-            <artifactId>commons-logging</artifactId>
+            <groupId>org.slf4j</groupId>
+            <artifactId>slf4j-api</artifactId>
         </dependency>
 
         <dependency>
diff --git a/core/src/main/java/org/apache/jsieve/BaseSieveContext.java b/core/src/main/java/org/apache/jsieve/BaseSieveContext.java
index 8edc597..e66afb7 100644
--- a/core/src/main/java/org/apache/jsieve/BaseSieveContext.java
+++ b/core/src/main/java/org/apache/jsieve/BaseSieveContext.java
@@ -19,8 +19,6 @@
 
 package org.apache.jsieve;
 
-import org.apache.commons.logging.Log;
-
 /**
  * Bean based implementation of context.
  */
@@ -38,17 +36,14 @@
 
     private final TestManager testManager;
 
-    private final Log log;
-
     public BaseSieveContext(final CommandManager commandManager,
                             final ComparatorManager comparatorManager,
-                            final TestManager testManager, final Log log) {
+                            final TestManager testManager) {
         this.commandStateManager = new CommandStateManager();
         this.conditionManager = new ConditionManager();
         this.testManager = testManager;
         this.commandManager = commandManager;
         this.comparatorManager = comparatorManager;
-        this.log = log;
     }
 
     /**
@@ -69,9 +64,6 @@
     @Override
     public void setCoordinate(ScriptCoordinate coordinate) {
         this.coordinate = coordinate;
-        if (coordinate != null) {
-            coordinate.setLog(getLog());
-        }
     }
 
     /**
@@ -99,14 +91,6 @@
     }
 
     /**
-     * @see SieveContext#getLog()
-     */
-    @Override
-    public Log getLog() {
-        return log;
-    }
-
-    /**
      * @see SieveContext#getComparatorManager()
      */
     @Override
diff --git a/core/src/main/java/org/apache/jsieve/Command.java b/core/src/main/java/org/apache/jsieve/Command.java
index 8d25904..4dc12a0 100644
--- a/core/src/main/java/org/apache/jsieve/Command.java
+++ b/core/src/main/java/org/apache/jsieve/Command.java
@@ -19,9 +19,10 @@
 
 package org.apache.jsieve;
 
-import org.apache.commons.logging.Log;
 import org.apache.jsieve.exception.SieveException;
 import org.apache.jsieve.mail.MailAdapter;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 
 /**
  * <p>
@@ -31,6 +32,7 @@
  * <code>command = identifier arguments ( ";" / block )</code>
  */
 public class Command implements Executable {
+    private static final Logger LOGGER = LoggerFactory.getLogger(Command.class);
 
     /** The name of this Command */
     private String fieldName;
@@ -143,13 +145,9 @@
     /**
      * @see org.apache.jsieve.Executable#execute(MailAdapter, SieveContext)
      */
-    public Object execute(MailAdapter mail, SieveContext context)
-            throws SieveException {
-        Log log = context.getLog();
-        if (log.isDebugEnabled()) {
-            log.debug(toString());
-            coordinate.debugDiagnostics(log);
-        }
+    public Object execute(MailAdapter mail, SieveContext context) throws SieveException {
+        LOGGER.debug(toString());
+        coordinate.debugDiagnostics();
         // commands are executed after the parsing phase
         // recursively from the top level block
         // so need to use the coordinate recorded from the parse
diff --git a/core/src/main/java/org/apache/jsieve/ConfigurationManager.java b/core/src/main/java/org/apache/jsieve/ConfigurationManager.java
index e83e9e9..a4031eb 100644
--- a/core/src/main/java/org/apache/jsieve/ConfigurationManager.java
+++ b/core/src/main/java/org/apache/jsieve/ConfigurationManager.java
@@ -19,10 +19,6 @@
 
 package org.apache.jsieve;
 
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
-import org.xml.sax.SAXException;
-
 import java.io.IOException;
 import java.io.InputStream;
 import java.util.Map;
@@ -30,6 +26,10 @@
 import java.util.concurrent.ConcurrentHashMap;
 import java.util.concurrent.ConcurrentMap;
 
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.xml.sax.SAXException;
+
 /**
  * <p>
  * <code>ConfigurationManager</code> parses the XML statements
@@ -97,9 +97,7 @@
      */
     private int initialConcurrencyLevel = DEFAULT_INITIAL_CONCURRENCY_LEVEL;
 
-    private static final Log LOG = LogFactory.getLog("org.apache.jsieve");
-
-    private Log log = LOG;
+    private static final Logger LOGGER = LoggerFactory.getLogger(ConfigurationManager.class);
 
     /**
      * Constructor for ConfigurationManager.
@@ -111,12 +109,10 @@
         try {
             parse();
         } catch (SAXException e) {
-            if (log.isErrorEnabled())
-                log.error("Exception processing Configuration: ", e);
+            LOGGER.error("Exception processing Configuration: ", e);
             throw new SieveConfigurationException(e);
         } catch (IOException e) {
-            if (log.isErrorEnabled())
-                log.error("Exception processing Configuration: ", e);
+            LOGGER.error("Exception processing Configuration: ", e);
             throw new SieveConfigurationException(e);
         }
     }
@@ -284,16 +280,8 @@
         return new TestManagerImpl(fieldTestMap);
     }
 
-    public Log getLog() {
-        return log;
-    }
-
-    public void setLog(Log log) {
-        this.log = log;
-    }
-
     public SieveFactory build() {
         return new SieveFactory(getCommandManager(), getComparatorManager(),
-                getTestManager(), getLog());
+                getTestManager());
     }
 }
diff --git a/core/src/main/java/org/apache/jsieve/ScriptCoordinate.java b/core/src/main/java/org/apache/jsieve/ScriptCoordinate.java
index cb1e724..c564d15 100644
--- a/core/src/main/java/org/apache/jsieve/ScriptCoordinate.java
+++ b/core/src/main/java/org/apache/jsieve/ScriptCoordinate.java
@@ -19,9 +19,10 @@
 
 package org.apache.jsieve;
 
-import org.apache.commons.logging.Log;
 import org.apache.jsieve.exception.CommandException;
 import org.apache.jsieve.exception.SyntaxException;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 
 /**
  * Specifies the positional extent of an element within the script being
@@ -29,6 +30,7 @@
  * starts and at which it ends.
  */
 public final class ScriptCoordinate {
+    private static final Logger LOGGER = LoggerFactory.getLogger(ScriptCoordinate.class);
 
     private final int startLineNumber;
 
@@ -38,8 +40,6 @@
 
     private final int endColumnNumber;
 
-    private Log log;
-
     public ScriptCoordinate(final int startLineNumber,
             final int startColumnNumber, final int endLineNumber,
             final int endColumnNumber) {
@@ -50,14 +50,6 @@
         this.endColumnNumber = endColumnNumber;
     }
 
-    public Log getLog() {
-        return log;
-    }
-
-    public void setLog(Log logger) {
-        this.log = logger;
-    }
-
     /**
      * Gets the number of the column where the elements ends.
      * 
@@ -99,18 +91,14 @@
      * of the script position. The message should end with a full stop.
      * 
      * @param message
-     *            <code>CharSequence</code> containing the base message, not
+     *            <code>String</code> containing the base message, not
      *            null
      * @return <code>SyntaxException</code> with details of the script
      *         position appended to the message, not null
      */
-    public SyntaxException syntaxException(CharSequence message) {
-        if (log != null) {
-            if (log.isWarnEnabled()) {
-                log.warn(message);
-            }
-            logDiagnosticsInfo(log);
-        }
+    public SyntaxException syntaxException(String message) {
+        LOGGER.warn(message);
+        logDiagnosticsInfo();
         final String fullMessage = addStartLineAndColumn(message);
         return new SyntaxException(fullMessage);
     }
@@ -120,18 +108,14 @@
      * of the script position. The message should end with a full stop.
      * 
      * @param message
-     *            <code>CharSequence</code> containing the base message, not
+     *            <code>String</code> containing the base message, not
      *            null
      * @return <code>CommandException</code> with details of the script
      *         position appended to the message, not null
      */
-    public CommandException commandException(CharSequence message) {
-        if (log != null) {
-            if (log.isWarnEnabled()) {
-                log.warn(message);
-            }
-            logDiagnosticsInfo(log);
-        }
+    public CommandException commandException(String message) {
+        LOGGER.warn(message);
+        logDiagnosticsInfo();
         final String fullMessage = addStartLineAndColumn(message);
         return new CommandException(fullMessage);
     }
@@ -162,31 +146,17 @@
 
     /**
      * Logs diagnotic information about the script coordinate.
-     * 
-     * @param logger
-     *            <code>Log</code>, not null
      */
-    public void logDiagnosticsInfo(Log logger) {
-        if (logger.isInfoEnabled()) {
-            logger.info("Expression starts line " + startLineNumber
-                    + " column " + startColumnNumber);
-            logger.info("Expression ends line " + endLineNumber + " column "
-                    + endColumnNumber);
-        }
+    public void logDiagnosticsInfo() {
+        LOGGER.info("Expression starts line {} column {}", startLineNumber, startColumnNumber);
+        LOGGER.info("Expression ends line {} column {}", endLineNumber, endColumnNumber);
     }
 
     /**
      * Logs diagnotic information about the script coordinate.
-     * 
-     * @param logger
-     *            <code>Log</code>, not null
      */
-    public void debugDiagnostics(Log logger) {
-        if (logger.isDebugEnabled()) {
-            logger.debug("Expression starts line " + startLineNumber
-                    + " column " + startColumnNumber);
-            logger.debug("Expression ends line " + endLineNumber + " column "
-                    + endColumnNumber);
-        }
+    public void debugDiagnostics() {
+        LOGGER.debug("Expression starts line {} column {}", startLineNumber, startColumnNumber);
+        LOGGER.debug("Expression ends line {} column {}", endLineNumber, endColumnNumber);
     }
 }
diff --git a/core/src/main/java/org/apache/jsieve/SieveContext.java b/core/src/main/java/org/apache/jsieve/SieveContext.java
index 17a6cff..4e8afdd 100644
--- a/core/src/main/java/org/apache/jsieve/SieveContext.java
+++ b/core/src/main/java/org/apache/jsieve/SieveContext.java
@@ -19,8 +19,6 @@
 
 package org.apache.jsieve;
 
-import org.apache.commons.logging.Log;
-
 /**
  * Context for sieve operations.
  * 
@@ -77,10 +75,4 @@
      * @return test manager, not null
      */
     public abstract TestManager getTestManager();
-
-    /**
-     * Gets the log.
-     * @return log, not null
-     */
-    public abstract Log getLog();
 }
diff --git a/core/src/main/java/org/apache/jsieve/SieveFactory.java b/core/src/main/java/org/apache/jsieve/SieveFactory.java
index ef4ff14..4f5d883 100644
--- a/core/src/main/java/org/apache/jsieve/SieveFactory.java
+++ b/core/src/main/java/org/apache/jsieve/SieveFactory.java
@@ -23,7 +23,6 @@
 import java.util.ArrayList;
 import java.util.List;
 
-import org.apache.commons.logging.Log;
 import org.apache.jsieve.exception.SieveException;
 import org.apache.jsieve.exception.StopException;
 import org.apache.jsieve.mail.ActionKeep;
@@ -33,6 +32,8 @@
 import org.apache.jsieve.parser.generated.SieveParser;
 import org.apache.jsieve.parser.generated.SieveParserVisitor;
 import org.apache.jsieve.parser.generated.SimpleNode;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 
 /**
  * <p>
@@ -65,6 +66,7 @@
  * </p>
  */
 public class SieveFactory {
+    private static final Logger LOGGER = LoggerFactory.getLogger(SieveFactory.class);
 
     private final CommandManager commandManager;
 
@@ -72,19 +74,16 @@
 
     private final TestManager testManager;
 
-    private final Log log;
-
     /**
      * Constructor for SieveFactory.
      */
     public SieveFactory(final CommandManager commandManager,
             final ComparatorManager comparatorManager,
-            final TestManager testManager, final Log log) {
+            final TestManager testManager) {
         super();
         this.commandManager = commandManager;
         this.comparatorManager = comparatorManager;
         this.testManager = testManager;
-        this.log = log;
     }
 
     /**
@@ -107,16 +106,10 @@
             node.jjtAccept(visitor, null);
             return node;
         } catch (ParseException ex) {
-            if (log.isErrorEnabled())
-                log.error("Parse failed. Reason: " + ex.getMessage());
-            if (log.isDebugEnabled())
-                log.debug("Parse failed.", ex);
+            LOGGER.error("Parse failed.", ex);
             throw ex;
         } catch (SieveException ex) {
-            if (log.isErrorEnabled())
-                log.error("Parse failed. Reason: " + ex.getMessage());
-            if (log.isDebugEnabled())
-                log.debug("Parse failed.", ex);
+            LOGGER.error("Parse failed.", ex);
             throw new ParseException(ex.getMessage());
         }
     }
@@ -144,7 +137,7 @@
     public void evaluate(MailAdapter mail, Node startNode)
             throws SieveException {
         final SieveContext context = new BaseSieveContext(commandManager,
-                comparatorManager, testManager, log);
+                comparatorManager, testManager);
         try {
             // Ensure that the context is set on the mail
             mail.setContext(context);
@@ -157,10 +150,7 @@
             } catch (StopException ex) {
                 // Stop is OK
             } catch (SieveException ex) {
-                if (log.isErrorEnabled())
-                    log.error("Evaluation failed. Reason: " + ex.getMessage());
-                if (log.isDebugEnabled())
-                    log.debug("Evaluation failed.", ex);
+                LOGGER.error("Evaluation failed.", ex);
                 throw ex;
             }
     
@@ -174,10 +164,7 @@
             try {
                 mail.executeActions();
             } catch (SieveException ex) {
-                if (log.isErrorEnabled())
-                    log.error("Evaluation failed. Reason: " + ex.getMessage());
-                if (log.isDebugEnabled())
-                    log.debug("Evaluation failed.", ex);
+                LOGGER.error("Evaluation failed.", ex);
                 throw ex;
             }
         } finally {
diff --git a/core/src/main/java/org/apache/jsieve/SieveParserVisitorImpl.java b/core/src/main/java/org/apache/jsieve/SieveParserVisitorImpl.java
index 51e5819..555f031 100644
--- a/core/src/main/java/org/apache/jsieve/SieveParserVisitorImpl.java
+++ b/core/src/main/java/org/apache/jsieve/SieveParserVisitorImpl.java
@@ -37,6 +37,8 @@
 import org.apache.jsieve.parser.generated.ASTtest_list;
 import org.apache.jsieve.parser.generated.SieveParserVisitor;
 import org.apache.jsieve.parser.generated.SimpleNode;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 
 /**
  * <p>
@@ -63,6 +65,8 @@
  * </p>
  */
 public class SieveParserVisitorImpl implements SieveParserVisitor {
+    private static final Logger LOGGER = LoggerFactory.getLogger(SieveParserVisitorImpl.class);
+
     private final SieveContext context;
 
     /**
@@ -131,7 +135,7 @@
             else if (next instanceof Argument) {
                 argList.add((Argument)next);
             } else {
-                context.getLog().error("Expected an 'Argument' but was " + next);
+                LOGGER.error("Expected an 'Argument' but was {}", next);
             }
         }
 
diff --git a/core/src/main/java/org/apache/jsieve/Test.java b/core/src/main/java/org/apache/jsieve/Test.java
index a7a7858..cb49fb9 100644
--- a/core/src/main/java/org/apache/jsieve/Test.java
+++ b/core/src/main/java/org/apache/jsieve/Test.java
@@ -19,11 +19,12 @@
 
 package org.apache.jsieve;
 
-import org.apache.commons.logging.Log;
 import org.apache.jsieve.exception.LookupException;
 import org.apache.jsieve.exception.SieveException;
 import org.apache.jsieve.mail.MailAdapter;
 import org.apache.jsieve.tests.ExecutableTest;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 
 /**
  * <p>
@@ -33,6 +34,7 @@
  * <code>test = identifier arguments</code>
  */
 public class Test implements Executable {
+    private static final Logger LOGGER = LoggerFactory.getLogger(Test.class);
 
     /** The name of this Test */
     private String fieldName;
@@ -57,10 +59,7 @@
      * @throws SieveException
      */
     public boolean isTestPassed(MailAdapter mail, SieveContext context) throws SieveException {
-        Log log = context.getLog();
-        if (log.isDebugEnabled()) {
-            log.debug(toString());
-        }
+        LOGGER.debug(toString());
         final String name = getName();
         final ExecutableTest test = context.getTestManager().getTest(name);
         return test.execute(mail, getArguments(), context);
diff --git a/core/src/main/java/org/apache/jsieve/commands/Require.java b/core/src/main/java/org/apache/jsieve/commands/Require.java
index 141d025..0521706 100644
--- a/core/src/main/java/org/apache/jsieve/commands/Require.java
+++ b/core/src/main/java/org/apache/jsieve/commands/Require.java
@@ -136,7 +136,7 @@
         List<Argument> args = arguments.getArgumentList();
         if (args.size() != 1)
             throw context.getCoordinate().syntaxException(
-                    new StringBuilder("Exactly 1 argument permitted. Found ").append(args.size()));
+                    new StringBuilder("Exactly 1 argument permitted. Found ").append(args.size()).toString());
 
         Argument argument = args.get(0);
         if (!(argument instanceof StringListArgument))
diff --git a/core/src/main/java/org/apache/jsieve/commands/extensions/Log.java b/core/src/main/java/org/apache/jsieve/commands/extensions/Log.java
index 6081a65..2e8d872 100644
--- a/core/src/main/java/org/apache/jsieve/commands/extensions/Log.java
+++ b/core/src/main/java/org/apache/jsieve/commands/extensions/Log.java
@@ -21,7 +21,6 @@
 
 import static org.apache.jsieve.commands.extensions.LogLevelTags.DEBUG_TAG;
 import static org.apache.jsieve.commands.extensions.LogLevelTags.ERROR_TAG;
-import static org.apache.jsieve.commands.extensions.LogLevelTags.FATAL_TAG;
 import static org.apache.jsieve.commands.extensions.LogLevelTags.INFO_TAG;
 import static org.apache.jsieve.commands.extensions.LogLevelTags.TRACE_TAG;
 import static org.apache.jsieve.commands.extensions.LogLevelTags.WARN_TAG;
@@ -39,6 +38,8 @@
 import org.apache.jsieve.exception.SieveException;
 import org.apache.jsieve.exception.SyntaxException;
 import org.apache.jsieve.mail.MailAdapter;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 
 /**
  * <p>
@@ -51,6 +52,8 @@
  * </p>
  */
 public class Log extends AbstractCommand {
+    private static final Logger LOGGER = LoggerFactory.getLogger(Log.class);
+
     /**
      * Constructor for Log.
      */
@@ -81,10 +84,9 @@
 
                 // LogLevel?
                 if (null == logLevel
-                        && (tag.equals(FATAL_TAG) || tag.equals(ERROR_TAG)
-                                || tag.equals(WARN_TAG) || tag.equals(INFO_TAG)
-                                || tag.equals(DEBUG_TAG) || tag
-                                .equals(TRACE_TAG)))
+                        && (tag.equals(ERROR_TAG)
+                            || tag.equals(WARN_TAG) || tag.equals(INFO_TAG)
+                            || tag.equals(DEBUG_TAG) || tag.equals(TRACE_TAG)))
                     logLevel = tag;
                 else
                     throw context.getCoordinate().syntaxException(
@@ -128,92 +130,63 @@
     protected void log(String logLevel, String message, SieveContext context)
             throws SyntaxException {
         if (logLevel.equals(INFO_TAG))
-            logInfo(message, context);
+            logInfo(message);
         else if (logLevel.equals(ERROR_TAG))
-            logError(message, context);
+            logError(message);
         else if (logLevel.equals(WARN_TAG))
-            logWarn(message, context);
+            logWarn(message);
         else if (logLevel.equals(DEBUG_TAG))
-            logDebug(message, context);
-        else if (logLevel.equals(FATAL_TAG))
-            logFatal(message, context);
+            logDebug(message);
         else if (logLevel.equals(TRACE_TAG))
-            logTrace(message, context);
+            logTrace(message);
         else
             throw context.getCoordinate().syntaxException(
-                    new StringBuilder("Unsupported logging level: ").append (logLevel));
-    }
-
-    /**
-     * Method logFatal.
-     * 
-     * @param message not null
-     * @param sieveContext not null
-     */
-    protected void logFatal(String message, SieveContext sieveContext) {
-        org.apache.commons.logging.Log log = sieveContext.getLog();
-        if (log.isFatalEnabled())
-            log.fatal(message);
+                    new StringBuilder("Unsupported logging level: ").append(logLevel).toString());
     }
 
     /**
      * Method logWarn.
      * 
      * @param message not null
-     * @param context not null
      */
-    protected void logWarn(String message, SieveContext context) {
-        org.apache.commons.logging.Log log = context.getLog();
-        if (log.isWarnEnabled())
-            log.warn(message);
+    protected void logWarn(String message) {
+        LOGGER.warn(message);
     }
 
     /**
      * Method logInfo.
      * 
      * @param message not null
-     * @param context not null
      */
-    protected void logInfo(String message, SieveContext context) {
-        org.apache.commons.logging.Log log = context.getLog();
-        if (log.isInfoEnabled())
-            log.info(message);
+    protected void logInfo(String message) {
+        LOGGER.info(message);
     }
 
     /**
      * Method logDebug.
      * 
      * @param message not null
-     * @param context not null
      */
-    protected void logDebug(String message, SieveContext context) {
-        org.apache.commons.logging.Log log = context.getLog();
-        if (log.isDebugEnabled())
-            log.debug(message);
+    protected void logDebug(String message) {
+        LOGGER.debug(message);
     }
 
     /**
      * Method logTrace.
      * 
      * @param message not null
-     * @param context not null
      */
-    protected void logTrace(String message, SieveContext context) {
-        org.apache.commons.logging.Log log = context.getLog();
-        if (log.isTraceEnabled())
-            log.trace(message);
+    protected void logTrace(String message) {
+        LOGGER.trace(message);
     }
 
     /**
      * Method logError.
      * 
      * @param message not null
-     * @param context not null
      */
-    protected void logError(String message, SieveContext context) {
-        org.apache.commons.logging.Log log = context.getLog();
-        if (log.isErrorEnabled())
-            log.error(message);
+    protected void logError(String message) {
+        LOGGER.error(message);
     }
 
     /**
diff --git a/core/src/main/java/org/apache/jsieve/commands/extensions/LogLevelTags.java b/core/src/main/java/org/apache/jsieve/commands/extensions/LogLevelTags.java
index 8579fdd..3a8ba82 100644
--- a/core/src/main/java/org/apache/jsieve/commands/extensions/LogLevelTags.java
+++ b/core/src/main/java/org/apache/jsieve/commands/extensions/LogLevelTags.java
@@ -28,8 +28,6 @@
 
     public static final String ERROR_TAG = ":error";
 
-    public static final String FATAL_TAG = ":fatal";
-
     public static final String INFO_TAG = ":info";
 
     public static final String TRACE_TAG = ":trace";
diff --git a/core/src/main/java/org/apache/jsieve/tests/AbstractTest.java b/core/src/main/java/org/apache/jsieve/tests/AbstractTest.java
index 653a97c..0c05991 100644
--- a/core/src/main/java/org/apache/jsieve/tests/AbstractTest.java
+++ b/core/src/main/java/org/apache/jsieve/tests/AbstractTest.java
@@ -19,18 +19,20 @@
 
 package org.apache.jsieve.tests;
 
-import org.apache.commons.logging.Log;
 import org.apache.jsieve.Arguments;
 import org.apache.jsieve.SieveContext;
 import org.apache.jsieve.exception.SieveException;
 import org.apache.jsieve.exception.SyntaxException;
 import org.apache.jsieve.mail.MailAdapter;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 
 /**
  * Abstract class AbstractTest defines a framework of common behavior for Sieve
  * Tests.
  */
 public abstract class AbstractTest implements ExecutableTest {
+    private static final Logger LOGGER = LoggerFactory.getLogger(AbstractTest.class);
 
     /**
      * Constructor for AbstractTest.
@@ -86,12 +88,9 @@
     protected void validateArguments(Arguments arguments, SieveContext context)
             throws SieveException {
         if (!arguments.getArgumentList().isEmpty()) {
-            final Log logger = context.getLog();
-            if (logger.isWarnEnabled()) {
-                logger.warn("Unexpected arguments for " + getClass().getName());
-            }
-            context.getCoordinate().logDiagnosticsInfo(logger);
-            logger.debug(arguments);
+            LOGGER.warn("Unexpected arguments for {}", getClass().getName());
+            context.getCoordinate().logDiagnosticsInfo();
+            LOGGER.debug(arguments.toString());
             final String message = context.getCoordinate()
                     .addStartLineAndColumn("Found unexpected arguments.");
             throw new SyntaxException(message);
diff --git a/core/src/main/java/org/apache/jsieve/tests/Not.java b/core/src/main/java/org/apache/jsieve/tests/Not.java
index 6c78813..3c2aeae 100644
--- a/core/src/main/java/org/apache/jsieve/tests/Not.java
+++ b/core/src/main/java/org/apache/jsieve/tests/Not.java
@@ -49,7 +49,7 @@
         List<Test> tests = arguments.getTestList().getTests();
         if (tests.size() != 1)
             throw context.getCoordinate().syntaxException(
-                    new StringBuilder("Exactly 1 test permitted. Found ").append(tests.size()));
+                    new StringBuilder("Exactly 1 test permitted. Found ").append(tests.size()).toString());
         for (Test test: tests) {
             result = result && test.isTestPassed(mail, context);
         }
diff --git a/core/src/main/java/org/apache/jsieve/tests/Size.java b/core/src/main/java/org/apache/jsieve/tests/Size.java
index 1a65568..e11c995 100644
--- a/core/src/main/java/org/apache/jsieve/tests/Size.java
+++ b/core/src/main/java/org/apache/jsieve/tests/Size.java
@@ -68,7 +68,7 @@
                     comparator = tag;
                 else
                     throw context.getCoordinate().syntaxException(
-                            new StringBuilder("Found unexpected TagArgument: \"").append(tag).append("\""));
+                            new StringBuilder("Found unexpected TagArgument: \"").append(tag).append("\"").toString());
             }
         }
         if (null == comparator)
diff --git a/core/src/test/java/org/apache/jsieve/AddressParseTest.java b/core/src/test/java/org/apache/jsieve/AddressParseTest.java
index 4d6e405..97b56c5 100644
--- a/core/src/test/java/org/apache/jsieve/AddressParseTest.java
+++ b/core/src/test/java/org/apache/jsieve/AddressParseTest.java
@@ -19,11 +19,11 @@
 
 package org.apache.jsieve;
 
-import org.apache.commons.logging.LogFactory;
-import org.apache.jsieve.utils.JUnitUtils;
-import org.apache.jsieve.utils.SieveMailAdapter;
 import static org.junit.Assert.assertFalse;
 import static org.junit.Assert.assertTrue;
+
+import org.apache.jsieve.utils.JUnitUtils;
+import org.apache.jsieve.utils.SieveMailAdapter;
 import org.junit.Before;
 import org.junit.Test;
 
@@ -43,10 +43,9 @@
     public void setUp() throws Exception {
         ConfigurationManager configurationManager = new ConfigurationManager();
         context = new BaseSieveContext(
-                configurationManager.getCommandManager(), configurationManager
-                .getComparatorManager(), configurationManager
-                .getTestManager(), LogFactory
-                .getLog(AddressParseTest.class));
+            configurationManager.getCommandManager(),
+            configurationManager.getComparatorManager(),
+            configurationManager.getTestManager());
         mail = (SieveMailAdapter) JUnitUtils.createMail();
         address = new OpenedAddress();
     }
diff --git a/core/src/test/java/org/apache/jsieve/LogTest.java b/core/src/test/java/org/apache/jsieve/LogTest.java
index 31ee6d3..2db1bdc 100644
--- a/core/src/test/java/org/apache/jsieve/LogTest.java
+++ b/core/src/test/java/org/apache/jsieve/LogTest.java
@@ -68,23 +68,6 @@
      * Test for Command 'log'.
      */
     @Test
-    public void testLogFatal() {
-        boolean isTestPassed = false;
-        String script = "log :fatal \"Log a fatal message.\";";
-
-        try {
-            JUnitUtils.interpret(JUnitUtils.createMail(), script);
-            isTestPassed = true;
-        } catch (ParseException e) {
-        } catch (SieveException e) {
-        }
-        Assert.assertTrue(isTestPassed);
-    }
-
-    /**
-     * Test for Command 'log'.
-     */
-    @Test
     public void testLogInfo() {
         boolean isTestPassed = false;
         String script = "log :info \"Log an info message.\";";
diff --git a/core/src/test/java/org/apache/jsieve/SieveParserVisitorImplQuoteTest.java b/core/src/test/java/org/apache/jsieve/SieveParserVisitorImplQuoteTest.java
index 80c6f8e..a001695 100644
--- a/core/src/test/java/org/apache/jsieve/SieveParserVisitorImplQuoteTest.java
+++ b/core/src/test/java/org/apache/jsieve/SieveParserVisitorImplQuoteTest.java
@@ -19,7 +19,9 @@
 
 package org.apache.jsieve;
 
-import org.apache.commons.logging.LogFactory;
+import java.util.ArrayList;
+import java.util.List;
+
 import org.apache.jsieve.parser.generated.ASTstring;
 import org.apache.jsieve.parser.generated.Node;
 import org.apache.jsieve.utils.JUnitUtils;
@@ -27,9 +29,6 @@
 import org.junit.Before;
 import org.junit.Test;
 
-import java.util.ArrayList;
-import java.util.List;
-
 public class SieveParserVisitorImplQuoteTest {
 
 
@@ -42,11 +41,11 @@
     @Before
     public void setUp() throws Exception {
         final ConfigurationManager configurationManager = new ConfigurationManager();
-        visitor = new SieveParserVisitorImpl(new BaseSieveContext(
-                configurationManager.getCommandManager(), configurationManager
-                .getComparatorManager(), configurationManager
-                .getTestManager(), LogFactory
-                .getLog(SieveParserVisitorImplQuoteTest.class)));
+        visitor = new SieveParserVisitorImpl(
+            new BaseSieveContext(
+                configurationManager.getCommandManager(),
+                configurationManager.getComparatorManager(),
+                configurationManager.getTestManager()));
         data = new ArrayList();
 
     }
diff --git a/core/src/test/java/org/apache/jsieve/commands/optional/FileIntoTest.java b/core/src/test/java/org/apache/jsieve/commands/optional/FileIntoTest.java
index 4d6947b..ae18610 100644
--- a/core/src/test/java/org/apache/jsieve/commands/optional/FileIntoTest.java
+++ b/core/src/test/java/org/apache/jsieve/commands/optional/FileIntoTest.java
@@ -18,7 +18,10 @@
  ****************************************************************/
 package org.apache.jsieve.commands.optional;
 
-import org.apache.commons.logging.LogFactory;
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.List;
+
 import org.apache.jsieve.Argument;
 import org.apache.jsieve.Arguments;
 import org.apache.jsieve.BaseSieveContext;
@@ -33,10 +36,6 @@
 import org.junit.Before;
 import org.junit.Test;
 
-import java.util.ArrayList;
-import java.util.Collections;
-import java.util.List;
-
 public class FileIntoTest {
 
     FileInto subject;
@@ -55,10 +54,9 @@
         dummyArguments = new Arguments(argumentList, new TestList(Collections.EMPTY_LIST));
         ConfigurationManager configurationManager = new ConfigurationManager();
         dummyContext = new BaseSieveContext(
-                configurationManager.getCommandManager(), configurationManager
-                .getComparatorManager(), configurationManager
-                .getTestManager(), LogFactory
-                .getLog(this.getClass()));
+            configurationManager.getCommandManager(),
+            configurationManager.getComparatorManager(),
+            configurationManager.getTestManager());
         dummyContext.setCoordinate(new ScriptCoordinate(0, 0, 0, 0));
         subject = new FileInto();
     }
diff --git a/core/src/test/java/org/apache/jsieve/utils/SieveMailAdapter.java b/core/src/test/java/org/apache/jsieve/utils/SieveMailAdapter.java
index a8d80ac..aeb324e 100644
--- a/core/src/test/java/org/apache/jsieve/utils/SieveMailAdapter.java
+++ b/core/src/test/java/org/apache/jsieve/utils/SieveMailAdapter.java
@@ -32,8 +32,6 @@
 import javax.mail.MessagingException;
 import javax.mail.internet.MimeMessage;
 
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
 import org.apache.jsieve.SieveContext;
 import org.apache.jsieve.exception.SieveException;
 import org.apache.jsieve.mail.Action;
@@ -41,6 +39,8 @@
 import org.apache.jsieve.mail.MailUtils;
 import org.apache.jsieve.mail.SieveMailException;
 import org.apache.jsieve.parser.address.SieveAddressBuilder;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 
 /**
  * <p>
@@ -54,7 +54,7 @@
  * to create an implementation of a MailAdapter.
  */
 public class SieveMailAdapter implements MailAdapter {
-    private Log log = LogFactory.getLog(SieveMailAdapter.class);
+    private static final Logger LOGGER = LoggerFactory.getLogger(SieveMailAdapter.class);
 
     /**
      * The message being adapted.
@@ -150,13 +150,10 @@
      * @see org.apache.jsieve.mail.MailAdapter#executeActions()
      */
     public void executeActions() throws SieveException {
-        boolean isDebugEnabled = log.isDebugEnabled();
         final List<Action> actions = getActions();
         for (final Action action:actions) {
-            if (isDebugEnabled)
-                log.debug("Executing " + action.toString());
+            LOGGER.debug("Executing {}", action.toString());
         }
-
     }
 
     /**
diff --git a/pom.xml b/pom.xml
index 7f90aa1..2b73049 100644
--- a/pom.xml
+++ b/pom.xml
@@ -86,6 +86,7 @@
         <assertj.version>1.7.1</assertj.version>
         <guava.version>25.1-jre</guava.version>
         <mime4j.version>0.8.3</mime4j.version>
+        <slf4j.version>1.7.27</slf4j.version>
     </properties>
 
     <dependencyManagement>
@@ -121,27 +122,9 @@
                 <version>${guava.version}</version>
             </dependency>
             <dependency>
-                <groupId>commons-logging</groupId>
-                <artifactId>commons-logging</artifactId>
-                <version>1.2</version>
-                <exclusions>
-                    <exclusion>
-                        <groupId>avalon-framework</groupId>
-                        <artifactId>avalon-framework</artifactId>
-                    </exclusion>
-                    <exclusion>
-                        <groupId>logkit</groupId>
-                        <artifactId>logkit</artifactId>
-                    </exclusion>
-                    <exclusion>
-                        <groupId>ch.qos.logback</groupId>
-                        <artifactId>logback-classic</artifactId>
-                    </exclusion>
-                    <exclusion>
-                        <groupId>javax.servlet</groupId>
-                        <artifactId>servlet-api</artifactId>
-                    </exclusion>
-                </exclusions>
+                <groupId>org.slf4j</groupId>
+                <artifactId>slf4j-api</artifactId>
+                <version>${slf4j.version}</version>
             </dependency>
             <dependency>
                 <groupId>junit</groupId>
diff --git a/util/pom.xml b/util/pom.xml
index ac483e1..f56e94d 100644
--- a/util/pom.xml
+++ b/util/pom.xml
@@ -59,8 +59,8 @@
         </dependency>
 
         <dependency>
-            <groupId>commons-logging</groupId>
-            <artifactId>commons-logging</artifactId>
+            <groupId>org.slf4j</groupId>
+            <artifactId>slf4j-api</artifactId>
         </dependency>
 
         <dependency>
diff --git a/util/src/main/java/org/apache/jsieve/util/NodeToSieveAdapter.java b/util/src/main/java/org/apache/jsieve/util/NodeToSieveAdapter.java
index 74fc42d..4aab025 100644
--- a/util/src/main/java/org/apache/jsieve/util/NodeToSieveAdapter.java
+++ b/util/src/main/java/org/apache/jsieve/util/NodeToSieveAdapter.java
@@ -18,8 +18,6 @@
  ****************************************************************/
 package org.apache.jsieve.util;
 
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
 import org.apache.jsieve.NumberArgument;
 import org.apache.jsieve.TagArgument;
 import org.apache.jsieve.parser.generated.ASTargument;
@@ -33,14 +31,15 @@
 import org.apache.jsieve.parser.generated.ASTtest;
 import org.apache.jsieve.parser.generated.ASTtest_list;
 import org.apache.jsieve.parser.generated.SimpleNode;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 
 /**
  * Adapters low level {@link NodeHandler} output into a
  * high level {@link SieveHandler}.
  */
 public class NodeToSieveAdapter implements NodeHandler {
-
-    private static final Log LOG = LogFactory.getLog(NodeToSieveAdapter.class);
+    private static final Logger LOGGER = LoggerFactory.getLogger(NodeToSieveAdapter.class);
     
     private final SieveHandler handler;
     
@@ -140,12 +139,12 @@
     public void start(ASTargument node) throws HaltTraversalException {
         final Object value = node.getValue();
         if (value == null) {
-            LOG.debug("Ignoring null argument");
+            LOGGER.debug("Ignoring null argument");
         } else if (value instanceof NumberArgument) {
             final NumberArgument numberArgument = (NumberArgument) value;
             Integer integer = numberArgument.getInteger();
             if (integer == null) {
-                LOG.debug("Ignoring null numeric argument");
+                LOGGER.debug("Ignoring null numeric argument");
             } else {
                 handler.argument(integer);
             }