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">