=== modified file 'build.gradle'
--- build.gradle	2024-04-17 10:14:07 +0000
+++ build.gradle	2024-04-22 10:32:34 +0000
@@ -145,6 +145,7 @@
 **     TJD 20240213 Gradle update to 7.6.4, update of Jetty to latest 9 version, dependency check plugin 
 **     TJD 20240219 dependencyCheck plugin configuration
 **     TJD 20240415 upgrade JS dependencies
+**     GBB 20240422 Remove logging libs except slf4j.
 */
 
 /*
@@ -440,6 +441,7 @@
     }
     // remove apis already provided by java 11+
     if (JavaVersion.current().isCompatibleWith(JavaVersion.VERSION_11)) {
+       exclude group: 'commons-logging', module: "commons-logging"
        exclude group: 'xml-apis', module: "xml-apis"
        exclude group: 'org.slf4j', module: 'slf4j-simple'
        exclude group: 'org.apache.xmlgraphics', module: 'batik-ext'
@@ -472,7 +474,6 @@
        fwdCCS group: 'jakarta.xml.ws', name: 'jakarta.xml.ws-api', version: '2.3.3'
     }
     fwdCCS group: 'org.apache.commons', name: 'commons-collections4', version: '4.4'
-    fwdConvertServer group: 'org.jboss.logging', name: 'jboss-logging', version: '3.5.3.Final'
     fwdConvertServer group: 'antlr', name: 'antlr', version: '2.7.7'
     fwdConvertServer group: 'com.goldencode', name: 'fwd-h2', version: '1.45-trunk'
     fwdConvertServer group: 'javax.transaction', name: 'jta', version: '1.1'
@@ -487,11 +488,9 @@
     fwdConvert group: 'com.fasterxml.jackson.core', name: 'jackson-core', version: '2.16.1'
     fwdConvert group: 'org.aspectj', name: 'aspectjtools', version: aspectjVersion
    
-    // commons-logging
-    fwdClientServer group: 'commons-logging', name: 'commons-logging', version: '1.3.0'
     // upgraded slf4j
     fwdClientServer group: 'org.slf4j', name: 'slf4j-api', version: '2.0.12'
-    fwdClientServer group: 'org.slf4j', name: 'slf4j-jdk14', version: '2.0.12'
+    fwdClientServer group: 'org.slf4j', name: 'jcl-over-slf4j', version: '2.0.12'
 
     // latest Jetty 9 series
     fwdClientServer group: 'org.eclipse.jetty', name: 'jetty-server', version: '9.4.53.v20231009'
@@ -562,8 +561,6 @@
     fwdServer (group: 'net.sourceforge.barbecue', name: 'barbecue', version: '1.5-beta1') {
         exclude group: 'bouncycastle'
     }
-    fwdServer group: 'org.apache.logging.log4j', name: 'log4j-1.2-api', version: '2.22.1'
-    fwdServer group: 'org.apache.logging.log4j', name: 'log4j-core', version: '2.22.1'
     
     fwdServer (group: 'org.ghost4j', name: 'ghost4j', version: '1.0.1') {
         exclude group: 'bouncycastle'

=== modified file 'build.xml'
--- build.xml	2024-04-17 10:14:07 +0000
+++ build.xml	2024-04-22 10:16:22 +0000
@@ -263,6 +263,7 @@
 ** 113 RFB 20240102          Update the spawner archive to include all the necessary spawner jars. Ref. #7589.
 ** 114 RFB 20240227          Update the spawner archive to include an additional jar (aspectjrt). Ref. #8230.
 ** 115 TJD 20240216          Java 17 updates, javac and iac tasks need 2GB of RAM for Java8
+**     GBB 20240422          Slf4j impl separate jar removed.
 -->
 
 <!--
@@ -495,7 +496,6 @@
 
     <path refid="compile.classpath"/>
     <pathelement location="${build.home}/lib/p2j.jar"/>
-    <pathelement location="${build.home}/lib/fwd-slf4j.jar"/>
 
   </path>
 
@@ -1107,7 +1107,6 @@
         <zipfileset dir="${basedir}/build/lib" 
                     prefix="lib"
                     includes="p2j.jar 
-                              fwd-slf4j.jar 
                               fwdaopltw.jar
                               fwd_sheet.war
                               ${libname}" />
@@ -1126,7 +1125,6 @@
         <zipfileset dir="${basedir}/build/lib" 
                     prefix="lib"
                     includes="p2j.jar
-                              fwd-slf4j.jar 
                               ${libname}" />
         <zipfileset dir="${dist.home}/client" 
                     prefix="lib"
@@ -1154,8 +1152,7 @@
                     filemode="755" />
         <zipfileset dir="${basedir}/build/lib"
                     includes="p2j.jar
-                              aspectjrt*.jar
-                              fwd-slf4j.jar" />
+                              aspectjrt*.jar />
     </zip>
     <chmod file="${archive.spawner_destfile}" perm="755"/>
 
@@ -1730,12 +1727,6 @@
           manifest="${manifest.dir}/p2j.mf"
      />
      
-     <jar jarfile="${build.home}/lib/fwd-slf4j.jar"
-          basedir="${build.home}/classes.aop"
-          includes="org/slf4j/**"
-          manifest="${manifest.dir}/fwdslf4j.mf"
-     />
-     
      <jar update="true" jarfile="${build.home}/lib/p2j.jar"
           basedir="${build.home}"
           includes="udf/**/udfs.sql udf/**/words-udfs-*.sql"

=== modified file 'src/com/goldencode/p2j/util/logging/CentralSlf4jLogger.java'
--- src/com/goldencode/p2j/util/logging/CentralSlf4jLogger.java	2023-04-18 10:18:02 +0000
+++ src/com/goldencode/p2j/util/logging/CentralSlf4jLogger.java	2024-04-22 10:17:09 +0000
@@ -2,10 +2,11 @@
  ** Module   : CentralSlf4jLogger.java
  ** Abstract : Implementation of slf4j logger that proxies to CentralLogger.
  **
- ** Copyright (c) 2023, Golden Code Development Corporation.
+ ** Copyright (c) 2023-2024, Golden Code Development Corporation.
  **
  ** -#- -I- --Date-- ----------------------------Description-----------------------------
  ** 001 GBB 20230327 Initial setup
+ ** 002 GBB 20240422 Implementation of api 2.0 
  */
 /*
  ** This program is free software: you can redistribute it and/or modify
@@ -61,11 +62,11 @@
  */
 package com.goldencode.p2j.util.logging;
 
-import com.goldencode.p2j.util.logging.*;
 import org.slf4j.*;
-import org.slf4j.Logger;
 import org.slf4j.helpers.*;
+import org.slf4j.spi.*;
 
+import java.util.*;
 import java.util.logging.*;
 
 /**
@@ -91,8 +92,19 @@
  * </table>
  */
 public class CentralSlf4jLogger
-implements Logger
+extends LegacyAbstractLogger
+implements LocationAwareLogger
 {
+   /** Map of slf4j levels to java logging levels. */
+   private static final Map<org.slf4j.event.Level, java.util.logging.Level> slf4jToJavaLevelMap =
+      new HashMap<org.slf4j.event.Level, java.util.logging.Level>() {{
+         put(org.slf4j.event.Level.ERROR, Level.SEVERE);
+         put(org.slf4j.event.Level.WARN, Level.WARNING);
+         put(org.slf4j.event.Level.INFO, Level.INFO);
+         put(org.slf4j.event.Level.DEBUG, Level.FINE);
+         put(org.slf4j.event.Level.TRACE, Level.FINER);
+      }};
+   
    /** The instance of CentralLogger to forward logs to. */
    private final CentralLogger logger;
 
@@ -979,6 +991,69 @@
    }
 
    /**
+    * Printing method with support for location information.
+    *
+    * @param    marker
+    *           The marker to be used for this event, may be null.
+    * @param    fqcn
+    *           The fully qualified class name of the logger instance, typically the logger class.
+    * @param    slf4jLevelInt
+    *           One of the level integers defined in this interface.
+    * @param    format
+    *           The message for the log event.
+    * @param    args
+    *           The arguments for the message format.
+    * @param    t
+    *           Throwable associated with the log event, may be null.
+    */
+   @Override
+   public void log(Marker marker, String fqcn, int slf4jLevelInt, String format, Object[] args, Throwable t)
+   {
+      handleNormalizedLoggingCall(org.slf4j.event.Level.intToLevel(slf4jLevelInt), marker, format, args, t);
+   }
+
+   /**
+    * Unknown. No slf4j doc, but from examples it seems to be the slf4j implementation class name.
+    * 
+    * @return See above.
+    */
+   @Override
+   protected String getFullyQualifiedCallerName()
+   {
+      return CentralSlf4jLogger.class.getName();
+   }
+
+   /**
+    * Given various arguments passed as parameters, perform actual logging. This method assumes that the 
+    * separation of the args array into actual objects and a throwable has been already operated.
+    * 
+    * @param    slf4jLevel
+    *           the SLF4J level for this event
+    * @param    marker 
+    *           The marker to be used for this event, may be null.
+    * @param    format
+    *           The message pattern which will be parsed and formatted
+    * @param    args
+    *           The array of arguments to be formatted, may be null
+    * @param    t
+    *           The exception whose stack trace should be logged, may be null
+    */
+   @Override
+   protected void handleNormalizedLoggingCall(org.slf4j.event.Level slf4jLevel,
+                                              Marker marker,
+                                              String format,
+                                              Object[] args,
+                                              Throwable t)
+   {
+      Level logLevel = slf4jToJavaLevelMap.get(slf4jLevel);
+      if (logLevel == null)
+      {
+         throw new IllegalStateException("Unexpected value: " + slf4jLevel);
+      }
+      logger.log(logLevel, format(format, args), t);
+   }
+
+   /**
     * Returns the message formatted according to org.eclipse.jetty.util.log.JettyAwareLogger - an slf4j 
     * formatting method compatible with Jetty's logs.
     *

=== added file 'src/com/goldencode/p2j/util/logging/CentralSlf4jProvider.java'
--- src/com/goldencode/p2j/util/logging/CentralSlf4jProvider.java	1970-01-01 00:00:00 +0000
+++ src/com/goldencode/p2j/util/logging/CentralSlf4jProvider.java	2024-04-22 09:14:18 +0000
@@ -0,0 +1,140 @@
+/*
+ ** Module   : CentralSlf4jProvider.java
+ ** Abstract : Implementation of slf4j provider.
+ **
+ ** Copyright (c) 2024, Golden Code Development Corporation.
+ **
+ ** -#- -I- --Date-- ----------------------------Description-----------------------------
+ ** 001 GBB 20240422 Initial setup
+ */
+/*
+ ** This program is free software: you can redistribute it and/or modify
+ ** it under the terms of the GNU Affero General Public License as
+ ** published by the Free Software Foundation, either version 3 of the
+ ** License, or (at your option) any later version.
+ **
+ ** This program is distributed in the hope that it will be useful,
+ ** but WITHOUT ANY WARRANTY; without even the implied warranty of
+ ** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ ** GNU Affero General Public License for more details.
+ **
+ ** You may find a copy of the GNU Affero GPL version 3 at the following
+ ** location: https://www.gnu.org/licenses/agpl-3.0.en.html
+ **
+ ** Additional terms under GNU Affero GPL version 3 section 7:
+ **
+ **   Under Section 7 of the GNU Affero GPL version 3, the following additional
+ **   terms apply to the works covered under the License.  These additional terms
+ **   are non-permissive additional terms allowed under Section 7 of the GNU
+ **   Affero GPL version 3 and may not be removed by you.
+ **
+ **   0. Attribution Requirement.
+ **
+ **     You must preserve all legal notices or author attributions in the covered
+ **     work or Appropriate Legal Notices displayed by works containing the covered
+ **     work.  You may not remove from the covered work any author or developer
+ **     credit already included within the covered work.
+ **
+ **   1. No License To Use Trademarks.
+ **
+ **     This license does not grant any license or rights to use the trademarks
+ **     Golden Code, FWD, any Golden Code or FWD logo, or any other trademarks
+ **     of Golden Code Development Corporation. You are not authorized to use the
+ **     name Golden Code, FWD, or the names of any author or contributor, for
+ **     publicity purposes without written authorization.
+ **
+ **   2. No Misrepresentation of Affiliation.
+ **
+ **     You may not represent yourself as Golden Code Development Corporation or FWD.
+ **
+ **     You may not represent yourself for publicity purposes as associated with
+ **     Golden Code Development Corporation, FWD, or any author or contributor to
+ **     the covered work, without written authorization.
+ **
+ **   3. No Misrepresentation of Source or Origin.
+ **
+ **     You may not represent the covered work as solely your work.  All modified
+ **     versions of the covered work must be marked in a reasonable way to make it
+ **     clear that the modified work is not originating from Golden Code Development
+ **     Corporation or FWD.  All modified versions must contain the notices of
+ **     attribution required in this license.
+ */
+package com.goldencode.p2j.util.logging;
+
+import org.slf4j.*;
+import org.slf4j.helpers.*;
+import org.slf4j.spi.*;
+
+/** Implementation of slf4j provider. */
+public class CentralSlf4jProvider
+implements SLF4JServiceProvider
+{
+   /** The custom logger factory. */
+   private static final CentralSlf4jLoggerFactory loggerFactory = new CentralSlf4jLoggerFactory();
+
+   /** The default base marker factory. */
+   private static IMarkerFactory markerFactory = new BasicMarkerFactory();
+
+   /** The default base mdc adapter. */
+   private static MDCAdapter mdcAdapter = new BasicMDCAdapter();
+   
+   /** 
+    * The lowest compatible api version.
+    * <p>
+    * To avoid constant folding by the compiler, this field must *not* be final
+    */
+   public static String REQUESTED_API_VERSION = "2.0.0"; // !final
+   
+   /**
+    * Returns the logger factory instance.
+    *
+    * @return   See above.
+    */
+   @Override
+   public ILoggerFactory getLoggerFactory()
+   {
+      return loggerFactory;
+   }
+
+   /**
+    * Return the marker factory instance.
+    *
+    * @return   See above.
+    */
+   @Override
+   public IMarkerFactory getMarkerFactory()
+   {
+      return markerFactory;
+   }
+
+   /**
+    * Returns the mdc adapter instance.
+    *
+    * @return   See above.
+    */
+   @Override
+   public MDCAdapter getMDCAdapter()
+   {
+      return mdcAdapter;
+   }
+
+   /**
+    * Returns the lowest compatible api version.
+    *
+    * @return   See above.
+    */
+   @Override
+   public String getRequestedApiVersion()
+   {
+      return REQUESTED_API_VERSION;
+   }
+
+   /**
+    * Initialization of all factories and adapters needed.
+    */
+   @Override
+   public void initialize()
+   {
+      // all fields are static final
+   }
+}
\ No newline at end of file

=== removed directory 'src/org'
=== removed directory 'src/org/slf4j'
=== removed directory 'src/org/slf4j/impl'
=== removed file 'src/org/slf4j/impl/StaticLoggerBinder.java'
--- src/org/slf4j/impl/StaticLoggerBinder.java	2024-04-17 10:14:07 +0000
+++ src/org/slf4j/impl/StaticLoggerBinder.java	1970-01-01 00:00:00 +0000
@@ -1,119 +0,0 @@
-/*
- ** Module   : StaticLoggerBinder.java
- ** Abstract : Implementation of slf4j logger factory binder.
- **
- ** Copyright (c) 2023, Golden Code Development Corporation.
- **
- ** -#- -I- --Date-- ----------------------------Description-----------------------------
- ** 001 GBB 20230327 Initial setup
- ** 002 TJD 20240208 Java 17 compatibility updates
- */
-/*
- ** This program is free software: you can redistribute it and/or modify
- ** it under the terms of the GNU Affero General Public License as
- ** published by the Free Software Foundation, either version 3 of the
- ** License, or (at your option) any later version.
- **
- ** This program is distributed in the hope that it will be useful,
- ** but WITHOUT ANY WARRANTY; without even the implied warranty of
- ** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- ** GNU Affero General Public License for more details.
- **
- ** You may find a copy of the GNU Affero GPL version 3 at the following
- ** location: https://www.gnu.org/licenses/agpl-3.0.en.html
- **
- ** Additional terms under GNU Affero GPL version 3 section 7:
- **
- **   Under Section 7 of the GNU Affero GPL version 3, the following additional
- **   terms apply to the works covered under the License.  These additional terms
- **   are non-permissive additional terms allowed under Section 7 of the GNU
- **   Affero GPL version 3 and may not be removed by you.
- **
- **   0. Attribution Requirement.
- **
- **     You must preserve all legal notices or author attributions in the covered
- **     work or Appropriate Legal Notices displayed by works containing the covered
- **     work.  You may not remove from the covered work any author or developer
- **     credit already included within the covered work.
- **
- **   1. No License To Use Trademarks.
- **
- **     This license does not grant any license or rights to use the trademarks
- **     Golden Code, FWD, any Golden Code or FWD logo, or any other trademarks
- **     of Golden Code Development Corporation. You are not authorized to use the
- **     name Golden Code, FWD, or the names of any author or contributor, for
- **     publicity purposes without written authorization.
- **
- **   2. No Misrepresentation of Affiliation.
- **
- **     You may not represent yourself as Golden Code Development Corporation or FWD.
- **
- **     You may not represent yourself for publicity purposes as associated with
- **     Golden Code Development Corporation, FWD, or any author or contributor to
- **     the covered work, without written authorization.
- **
- **   3. No Misrepresentation of Source or Origin.
- **
- **     You may not represent the covered work as solely your work.  All modified
- **     versions of the covered work must be marked in a reasonable way to make it
- **     clear that the modified work is not originating from Golden Code Development
- **     Corporation or FWD.  All modified versions must contain the notices of
- **     attribution required in this license.
- */
-package org.slf4j.impl;
-
-import com.goldencode.p2j.util.logging.*;
-import org.slf4j.*;
-import org.slf4j.spi.*;
-
-/**
- * The class name and package name should exactly match what slf4j lib expects to find for it to be able to
- * load this custom implementation. This is a very standard implementation.
- */
-@SuppressWarnings("deprecation")
-public class StaticLoggerBinder
-implements LoggerFactoryBinder
-{
-   /**
-    * The version of the slf4j api this implementation works for. The name of the field should not be 
-    * changed. 
-    */
-   public static String REQUESTED_API_VERSION = "1.6";
-
-   /** The custom logger factory. */
-   private static final CentralSlf4jLoggerFactory loggerFactory = new CentralSlf4jLoggerFactory();
-   
-   /** The unique instance of this class. */
-   private static final StaticLoggerBinder SINGLETON = new StaticLoggerBinder();
-
-   /**
-    * Return the singleton of this class.
-    *
-    * @return   The CentralSlf4jBinder singleton
-    */
-   public static StaticLoggerBinder getSingleton() {
-      return SINGLETON;
-   }
-
-   /**
-    * Return the logger factory instance.
-    * 
-    * @return   The logger factory instance.
-    */
-   @Override
-   public ILoggerFactory getLoggerFactory()
-   {
-      return loggerFactory;
-   }
-   
-   /**
-    * Return the logger factory class name.
-    *
-    * @return   The logger factory class name.
-    */
-   @Override
-   public String getLoggerFactoryClassStr()
-   {
-      return CentralSlf4jLoggerFactory.class.getName();
-   }
-}

