This is an automated email from the ASF dual-hosted git repository.

seanfinan pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/ctakes.git


The following commit(s) were added to refs/heads/main by this push:
     new b34adfd  Fix for slf4j not propagating loggers through root logger. 
Construct log text from parameterized log ("text {}", arg)
b34adfd is described below

commit b34adfdc3abd4b19d96cdab12613fde20d84c8a1
Author: Sean Finan <[email protected]>
AuthorDate: Fri Aug 16 16:47:20 2024 -0400

    Fix for slf4j not propagating loggers through root logger.
    Construct log text from parameterized log ("text {}", arg)
---
 .../apache/ctakes/gui/component/LoggerPanel.java   | 56 +++++++++++++++++++---
 .../org/apache/ctakes/log/ObservableLogger.java    |  6 +--
 ctakes-type-system/src/user/config/log4j2.xml      |  4 +-
 3 files changed, 55 insertions(+), 11 deletions(-)

diff --git 
a/ctakes-gui/src/main/java/org/apache/ctakes/gui/component/LoggerPanel.java 
b/ctakes-gui/src/main/java/org/apache/ctakes/gui/component/LoggerPanel.java
index 42755f0..3645852 100644
--- a/ctakes-gui/src/main/java/org/apache/ctakes/gui/component/LoggerPanel.java
+++ b/ctakes-gui/src/main/java/org/apache/ctakes/gui/component/LoggerPanel.java
@@ -29,10 +29,6 @@ final public class LoggerPanel extends JScrollPane {
       final LoggerPanel panel = new LoggerPanel( levels );
       final Logger rootLogger = LoggerFactory.getLogger( 
org.slf4j.Logger.ROOT_LOGGER_NAME );
       addLogListener( rootLogger, panel.getLogHandler() );
-      final Logger pa = LoggerFactory.getLogger( "ProgressAppender" );
-      addLogListener( pa, panel.getLogHandler() );
-      final Logger pd = LoggerFactory.getLogger( "ProgressDone" );
-      addLogListener( pd, panel.getLogHandler() );
       return panel;
    }
 
@@ -130,9 +126,9 @@ final public class LoggerPanel extends JScrollPane {
          }
          final Level level = event.getLevel();
          if ( _levels.contains( level ) ) {
-            final Object message = event.getMessage();
+            final String message = constructMessage( event );
             if ( message != null ) {
-               String text = message.toString();
+               String text = message;
                if ( text.equals( "." ) ) {
                   appendText( text );
                   return;
@@ -155,6 +151,43 @@ final public class LoggerPanel extends JScrollPane {
          }
       }
 
+      /**
+       *
+       * @param event slf4j event
+       * @return message reconstructed from parameterized logging: ( "text 
{}", arg )
+       */
+      static private String constructMessage( final LoggingEvent event ) {
+         return constructMessage( event.getMessage(), event.getArguments() );
+      }
+
+      /**
+       *
+       * @param message -
+       * @param args -
+       * @return message reconstructed from parameterized logging: ( "text 
{}", arg )
+       */
+      static private String constructMessage( final String message, final 
java.util.List<Object> args ) {
+         if ( args == null || args.isEmpty() ) {
+            return message;
+         }
+         final StringBuilder sb = new StringBuilder();
+         int lastIndex = 0;
+         for ( Object arg : args ) {
+            final int nextIndex = message.indexOf( "{}", lastIndex );
+            if ( nextIndex < 0 ) {
+               break;
+            }
+            if ( nextIndex > lastIndex ) {
+               sb.append( message, lastIndex, nextIndex );
+            }
+            sb.append( arg.toString() );
+            lastIndex = nextIndex+2;
+         }
+         if ( lastIndex < message.length() ) {
+            sb.append( message.substring( lastIndex ) );
+         }
+         return sb.toString();
+      }
 
 //      /**
 //       * {@inheritDoc}
@@ -174,5 +207,16 @@ final public class LoggerPanel extends JScrollPane {
 //      }
    }
 
+//   public static void main( String[] args ) {
+//      System.out.println( "EMPTY:" + LogHandler.constructMessage( "", null 
));
+//      System.out.println( "ONE:" + LogHandler.constructMessage( "{}", 
Collections.singletonList("Hello") ));
+//      System.out.println( "TWO:" + LogHandler.constructMessage( "{}{}", 
Arrays.asList( "One","Two" ) ));
+//      System.out.println( "TWO1:" + LogHandler.constructMessage( " {}{}", 
Arrays.asList( "One","Two" ) ));
+//      System.out.println( "TWO2:" + LogHandler.constructMessage( "{} {}", 
Arrays.asList( "One","Two" ) ));
+//      System.out.println( "TWO3:" + LogHandler.constructMessage( "{}{} ", 
Arrays.asList( "One","Two" ) ));
+//      System.out.println( "TWO1:" + LogHandler.constructMessage( "- {}{}-", 
Arrays.asList( "One","Two" ) ));
+//      System.out.println( "TWO2:" + LogHandler.constructMessage( "-{} -{}", 
Arrays.asList( "One","Two" ) ));
+//      System.out.println( "TWO3:" + LogHandler.constructMessage( "-{}{}- -", 
Arrays.asList( "One","Two" ) ));
+//   }
 
 }
diff --git 
a/ctakes-type-system/src/main/java/org/apache/ctakes/log/ObservableLogger.java 
b/ctakes-type-system/src/main/java/org/apache/ctakes/log/ObservableLogger.java
index c23c78a..c933088 100644
--- 
a/ctakes-type-system/src/main/java/org/apache/ctakes/log/ObservableLogger.java
+++ 
b/ctakes-type-system/src/main/java/org/apache/ctakes/log/ObservableLogger.java
@@ -6,8 +6,8 @@ import org.slf4j.event.DefaultLoggingEvent;
 import org.slf4j.event.Level;
 import org.slf4j.spi.LoggingEventAware;
 
-import java.util.ArrayList;
 import java.util.Collection;
+import java.util.HashSet;
 
 import static org.slf4j.event.Level.*;
 
@@ -24,14 +24,14 @@ final public class ObservableLogger implements Logger {
 
    private final Logger _delegate;
 
-   private final Collection<LoggingEventAware> _listeners;
+   // No real concerns about thread safety ...
+   static private final Collection<LoggingEventAware> _listeners = new 
HashSet<>();
 
    static private final Object[] EMPTY_ARGS = new Object[]{};
 
 
    public ObservableLogger( final Logger delegate ) {
       _delegate = delegate;
-      _listeners = new ArrayList<>();
    }
 
    public void addListener( final LoggingEventAware listener ) {
diff --git a/ctakes-type-system/src/user/config/log4j2.xml 
b/ctakes-type-system/src/user/config/log4j2.xml
index d1f6e31..28bed75 100644
--- a/ctakes-type-system/src/user/config/log4j2.xml
+++ b/ctakes-type-system/src/user/config/log4j2.xml
@@ -30,8 +30,8 @@
         <Console name="eolAppender" target="SYSTEM_OUT">
             <PatternLayout pattern="%m%n"/>
         </Console>
-        <File name="fileAppender" fileName="log/ctakes.log" append="false">
-        </File>
+<!--        <File name="fileAppender" fileName="log/ctakes.log" 
append="false">-->
+<!--        </File>-->
     </Appenders>
     <Loggers>
         <Logger name="ProgressAppender" level="info" additivity="false">

Reply via email to