You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@felix.apache.org by tj...@apache.org on 2020/08/19 22:20:26 UTC

[felix-dev] branch master updated: FELIX-6321 - keep existing LogManager on config update

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

tjwatson pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/felix-dev.git


The following commit(s) were added to refs/heads/master by this push:
     new 3e7972b  FELIX-6321 - keep existing LogManager on config update
3e7972b is described below

commit 3e7972b20b16bb069d71797add4e8196b048d1ac
Author: Thomas Watson <tj...@us.ibm.com>
AuthorDate: Wed Aug 19 17:15:04 2020 -0500

    FELIX-6321 - keep existing LogManager on config update
    
    Replacing the existing LogManager with a new one on
    configuration updates causes the existing loggers for
    each component to stop working properly.  This is a quick
    fix to avoid creating a new LogManager on config updates
    of SCR.  If dynamic updates is needed for the ds.log.extension
    property then more work is needed.  For now this is a
    one time setting only configured through context properties
---
 scr/src/main/java/org/apache/felix/scr/impl/Activator.java | 14 ++++++++------
 .../apache/felix/scr/impl/config/ScrConfigurationImpl.java |  2 +-
 .../org/apache/felix/scr/impl/logger/ExtLogManager.java    |  2 +-
 .../java/org/apache/felix/scr/impl/logger/LogManager.java  |  1 -
 .../org/apache/felix/scr/impl/logger/ScrLogManager.java    |  7 +++++--
 .../java/org/apache/felix/scr/impl/logger/LoggerTest.java  | 12 ++++++++++--
 6 files changed, 25 insertions(+), 13 deletions(-)

diff --git a/scr/src/main/java/org/apache/felix/scr/impl/Activator.java b/scr/src/main/java/org/apache/felix/scr/impl/Activator.java
index f3ab7cb..a419f43 100644
--- a/scr/src/main/java/org/apache/felix/scr/impl/Activator.java
+++ b/scr/src/main/java/org/apache/felix/scr/impl/Activator.java
@@ -652,14 +652,16 @@ public class Activator extends AbstractExtender
         }
     }
 
-    public void resetLogger()
+    public void setLogger()
     {
-        // reset existing logger
-        ScrLogger existingLogger = logger;
-        if (existingLogger != null)
+        // TODO we only set the logger once
+        // If the need arises to be able to dynamically set the logger type
+        // then more work is needed to do that switch
+        // for now we only can configure ds.log.extension with context properties
+        if (logger == null)
         {
-            existingLogger.close();
+            logger = ScrLogManager.scr(m_context, m_configuration);
         }
-        logger = ScrLogManager.scr(m_context, m_configuration);
+
     }
 }
diff --git a/scr/src/main/java/org/apache/felix/scr/impl/config/ScrConfigurationImpl.java b/scr/src/main/java/org/apache/felix/scr/impl/config/ScrConfigurationImpl.java
index 064312e..6d6fd20 100644
--- a/scr/src/main/java/org/apache/felix/scr/impl/config/ScrConfigurationImpl.java
+++ b/scr/src/main/java/org/apache/felix/scr/impl/config/ScrConfigurationImpl.java
@@ -222,7 +222,7 @@ public class ScrConfigurationImpl implements ScrConfiguration
             oldGlobalExtender = this.globalExtender;
             this.globalExtender = newGlobalExtender;
         }
-        activator.resetLogger();
+        activator.setLogger();
         if ( newGlobalExtender != oldGlobalExtender )
         {
             activator.restart( newGlobalExtender );
diff --git a/scr/src/main/java/org/apache/felix/scr/impl/logger/ExtLogManager.java b/scr/src/main/java/org/apache/felix/scr/impl/logger/ExtLogManager.java
index 9c26355..1752987 100644
--- a/scr/src/main/java/org/apache/felix/scr/impl/logger/ExtLogManager.java
+++ b/scr/src/main/java/org/apache/felix/scr/impl/logger/ExtLogManager.java
@@ -52,7 +52,7 @@ class ExtLogManager extends ScrLogManager {
 
 	@Override
 	public BundleLogger bundle(Bundle bundle) {
-		return getLogger(this.bundle, SCR_LOGGER_PREFIX.concat(bundle.getSymbolicName()), ScrLoggerFacade.class);
+		return getLogger(bundle, SCR_LOGGER_PREFIX.concat(bundle.getSymbolicName()), ScrLoggerFacade.class);
 	}
 
 	@Override
diff --git a/scr/src/main/java/org/apache/felix/scr/impl/logger/LogManager.java b/scr/src/main/java/org/apache/felix/scr/impl/logger/LogManager.java
index 1bfda88..47c8d03 100644
--- a/scr/src/main/java/org/apache/felix/scr/impl/logger/LogManager.java
+++ b/scr/src/main/java/org/apache/felix/scr/impl/logger/LogManager.java
@@ -160,7 +160,6 @@ class LogManager extends ServiceTracker<LoggerFactory, LoggerFactory> implements
 
 		LogDomain(Bundle bundle) {
 			this.bundle = bundle;
-			open();
 		}
 
 		private void reset() {
diff --git a/scr/src/main/java/org/apache/felix/scr/impl/logger/ScrLogManager.java b/scr/src/main/java/org/apache/felix/scr/impl/logger/ScrLogManager.java
index 6a1c18d..d25dd92 100644
--- a/scr/src/main/java/org/apache/felix/scr/impl/logger/ScrLogManager.java
+++ b/scr/src/main/java/org/apache/felix/scr/impl/logger/ScrLogManager.java
@@ -52,10 +52,13 @@ public class ScrLogManager extends LogManager {
 	 */
 
 	public static ScrLogger scr(BundleContext context, ScrConfiguration config) {
+        ScrLogManager manager;
 		if (config.isLogExtension())
-			return new ExtLogManager(context, config).scr();
+            manager = new ExtLogManager(context, config);
 		else
-			return new ScrLogManager(context, config).scr();
+            manager = new ScrLogManager(context, config);
+        manager.open();
+        return manager.scr();
 	}
 
 	ScrLogManager(BundleContext context, ScrConfiguration config) {
diff --git a/scr/src/test/java/org/apache/felix/scr/impl/logger/LoggerTest.java b/scr/src/test/java/org/apache/felix/scr/impl/logger/LoggerTest.java
index 527b812..cfafd1b 100644
--- a/scr/src/test/java/org/apache/felix/scr/impl/logger/LoggerTest.java
+++ b/scr/src/test/java/org/apache/felix/scr/impl/logger/LoggerTest.java
@@ -118,6 +118,7 @@ public class LoggerTest {
 		ScrConfiguration config = mock(ScrConfiguration.class);
 		when(config.getLogLevel()).thenReturn(Level.DEBUG);
 		ExtLogManager elm = new ExtLogManager(scr.getBundleContext(), config);
+        elm.open();
 
 		ComponentLogger clog = elm.component(component, "i.c", "c");
 
@@ -131,6 +132,7 @@ public class LoggerTest {
 		ScrConfiguration config = mock(ScrConfiguration.class);
 		when(config.getLogLevel()).thenReturn(Level.DEBUG);
 		ExtLogManager elm = new ExtLogManager(scr.getBundleContext(), config);
+        elm.open();
 		try (Buf out = new Buf(System.out);
 				Buf err = new Buf(System.err);) {
 			try {
@@ -191,7 +193,7 @@ public class LoggerTest {
 		bundle.log(Level.ERROR, "Ext", null);
 		assertThat(l.entries).hasSize(1);
 		LogEntry le = l.entries.get(0);
-		assertThat(le.bundle).isEqualTo(scr);
+        assertThat(le.bundle).isEqualTo(component);
 	}
 
 	@Test
@@ -263,6 +265,7 @@ public class LoggerTest {
 		l.register();
 
 		ScrLogManager lm = new ExtLogManager(scr.getBundleContext(), config);
+        lm.open();
 
 		{
 			l.entries.clear();
@@ -282,7 +285,7 @@ public class LoggerTest {
 			assertThat(l.entries).hasSize(1);
 			LogEntry le = l.entries.get(0);
 			assertThat(le.format).isEqualTo("Bundle");
-			assertThat(le.bundle).isEqualTo(scr);
+            assertThat(le.bundle).isEqualTo(component);
 			assertThat(le.loggername).isEqualTo(ExtLogManager.SCR_LOGGER_PREFIX + "component");
 		}
 
@@ -318,6 +321,7 @@ public class LoggerTest {
 		l.register();
 
 		ScrLogManager lm = new ScrLogManager(scr.getBundleContext(), config);
+        lm.open();
 
 		{
 			l.entries.clear();
@@ -363,6 +367,7 @@ public class LoggerTest {
 	public void testLifeCycle() {
 
 		LogManager lm = new LogManager(scr.getBundleContext());
+        lm.open();
 		LoggerFacade facade = lm.getLogger(scr, "lifecycle", LoggerFacade.class);
 		assertThat(facade.logger).isNull();
 
@@ -398,6 +403,7 @@ public class LoggerTest {
 	public void testPrioritiesLogService() {
 
 		LogManager lm = new LogManager(scr.getBundleContext());
+        lm.open();
 		LoggerFacade facade = lm.getLogger(scr, "lifecycle", LoggerFacade.class);
 		assertThat(facade.logger).isNull();
 
@@ -430,6 +436,7 @@ public class LoggerTest {
 		l.register();
 
 		ScrLogManager lm = new ScrLogManager(scr.getBundleContext(), config);
+        lm.open();
 		lm.component(component, "implementation.class", "component");
 
 		assertThat(lm.lock.domains).hasSize(1);
@@ -457,6 +464,7 @@ public class LoggerTest {
 		l.register();
 
 		ScrLogManager lm = new ScrLogManager(scr.getBundleContext(), config);
+        lm.open();
 		ScrLogger facade = lm.scr();
 
 		assert LogLevel.values().length == Level.values().length;