You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@felix.apache.org by ro...@apache.org on 2021/11/29 03:51:15 UTC
[felix-dev] 05/05: FELIX-6478 add support for passing OSGi Log 1.4 sequence numbers to future logback (1.3) / slf4j (2.0)
This is an automated email from the ASF dual-hosted git repository.
rotty3000 pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/felix-dev.git
commit 03255314a55f3454bf48b477b6ee46f2f2f8365b
Author: Raymond Augé <ra...@liferay.com>
AuthorDate: Sun Nov 28 22:40:31 2021 -0500
FELIX-6478 add support for passing OSGi Log 1.4 sequence numbers to future logback (1.3) / slf4j (2.0)
Signed-off-by: Raymond Augé <ra...@liferay.com>
---
logback/itests/immediate-jbl/itest.bndrun | 12 ++++--
logback/itests/immediate-jcl/itest.bndrun | 20 ++++++----
logback/itests/immediate-jul/itest.bndrun | 6 +--
logback/itests/immediate-log4j1/itest.bndrun | 18 +++++----
logback/itests/immediate-log4j2/itest.bndrun | 18 +++++----
logback/itests/immediate-slf4j/itest.bndrun | 16 +++++---
logback/itests/itest-parent/pom.xml | 24 +++++++++++-
.../standard-equinox-logservice/itest.bndrun | 12 +++---
logback/itests/standard-jbl/itest.bndrun | 17 ++++++---
logback/itests/standard-jcl/itest.bndrun | 14 +++----
logback/itests/standard-log4j1/itest.bndrun | 12 +++---
logback/itests/standard-slf4j/itest.bndrun | 10 ++---
logback/logback/pom.xml | 18 ++++++++-
.../apache/felix/logback/internal/Activator.java | 43 +++++++++++++++++-----
.../felix/logback/internal/LogbackLogListener.java | 25 +++++++++++++
15 files changed, 187 insertions(+), 78 deletions(-)
diff --git a/logback/itests/immediate-jbl/itest.bndrun b/logback/itests/immediate-jbl/itest.bndrun
index ccda978..5176812 100644
--- a/logback/itests/immediate-jbl/itest.bndrun
+++ b/logback/itests/immediate-jbl/itest.bndrun
@@ -3,22 +3,26 @@
-runfw: org.apache.felix.framework
-runrequires:\
+ osgi.identity;filter:='(osgi.identity=org.apache.felix.log.extension)',\
osgi.identity;filter:='(osgi.identity=org.apache.felix.logback.itests.immediate.jbl)'
-runpath: \
ch.qos.logback.classic;version=latest,\
ch.qos.logback.core;version=latest,\
- slf4j.api;version=latest
+ slf4j.api;version=latest,\
+ org.apache.felix.log;version=latest,\
+ org.apache.felix.logback;version=latest
-runsystempackages: \
- org.slf4j;version=${slf4j.api.version},\
- org.slf4j.helpers;version=${slf4j.api.version},\
- org.slf4j.spi;version=${slf4j.api.version}
+ org.slf4j;version=${version_cleanup;${slf4j.api.version}},\
+ org.slf4j.helpers;version=${version_cleanup;${slf4j.api.version}},\
+ org.slf4j.spi;version=${version_cleanup;${slf4j.api.version}}
-runproperties.this: \
org.jboss.logging.provider=slf4j
-runbundles: \
+ org.apache.felix.log.extension;version='[1.0.0,1.0.1)',\
org.apache.felix.logback.itests.immediate.jbl;version='[1.0.0,1.0.1)',\
org.apache.servicemix.bundles.junit;version='[4.13.2,4.13.3)',\
org.jboss.logging.jboss-logging;version='[3.4.2,3.4.3)'
\ No newline at end of file
diff --git a/logback/itests/immediate-jcl/itest.bndrun b/logback/itests/immediate-jcl/itest.bndrun
index a9a6e8c..3e7aae2 100644
--- a/logback/itests/immediate-jcl/itest.bndrun
+++ b/logback/itests/immediate-jcl/itest.bndrun
@@ -4,20 +4,24 @@
-runrequires:\
osgi.identity;filter:='(osgi.identity=log4j.over.slf4j)',\
+ osgi.identity;filter:='(osgi.identity=org.apache.felix.log.extension)',\
osgi.identity;filter:='(osgi.identity=org.apache.felix.logback.itests.immediate.jcl)'
-runpath: \
ch.qos.logback.classic;version=latest,\
ch.qos.logback.core;version=latest,\
- slf4j.api;version=latest
+ slf4j.api;version=latest,\
+ org.apache.felix.log;version=latest,\
+ org.apache.felix.logback;version=latest
-runsystempackages: \
- org.slf4j;version=${slf4j.api.version},\
- org.slf4j.helpers;version=${slf4j.api.version},\
- org.slf4j.spi;version=${slf4j.api.version}
+ org.slf4j;version=${version_cleanup;${slf4j.api.version}},\
+ org.slf4j.helpers;version=${version_cleanup;${slf4j.api.version}},\
+ org.slf4j.spi;version=${version_cleanup;${slf4j.api.version}}
-runbundles: \
- log4j.over.slf4j;version='[1.7.32,1.7.33)',\
- org.apache.commons.logging;version='[1.2.0,1.2.1)',\
- org.apache.felix.logback.itests.immediate.jcl;version='[1.0.0,1.0.1)',\
- org.apache.servicemix.bundles.junit;version='[4.13.2,4.13.3)'
\ No newline at end of file
+ log4j.over.slf4j;version='[1.7.32,1.7.33)',\
+ org.apache.commons.logging;version='[1.2.0,1.2.1)',\
+ org.apache.felix.log.extension;version='[1.0.0,1.0.1)',\
+ org.apache.felix.logback.itests.immediate.jcl;version='[1.0.0,1.0.1)',\
+ org.apache.servicemix.bundles.junit;version='[4.13.2,4.13.3)'
\ No newline at end of file
diff --git a/logback/itests/immediate-jul/itest.bndrun b/logback/itests/immediate-jul/itest.bndrun
index 6568bb6..d56c960 100644
--- a/logback/itests/immediate-jul/itest.bndrun
+++ b/logback/itests/immediate-jul/itest.bndrun
@@ -12,9 +12,9 @@
org.apache.felix.logback;version=latest
-runsystempackages: \
- org.slf4j;version=${slf4j.api.version},\
- org.slf4j.helpers;version=${slf4j.api.version},\
- org.slf4j.spi;version=${slf4j.api.version}
+ org.slf4j;version=${version_cleanup;${slf4j.api.version}},\
+ org.slf4j.helpers;version=${version_cleanup;${slf4j.api.version}},\
+ org.slf4j.spi;version=${version_cleanup;${slf4j.api.version}}
-runbundles: \
org.apache.felix.logback.itests.immediate.jul;version='[1.0.0,1.0.1)',\
diff --git a/logback/itests/immediate-log4j1/itest.bndrun b/logback/itests/immediate-log4j1/itest.bndrun
index 7b60182..90429c8 100644
--- a/logback/itests/immediate-log4j1/itest.bndrun
+++ b/logback/itests/immediate-log4j1/itest.bndrun
@@ -3,19 +3,23 @@
-runfw: org.apache.felix.framework
-runrequires:\
+ osgi.identity;filter:='(osgi.identity=org.apache.felix.log.extension)',\
osgi.identity;filter:='(osgi.identity=org.apache.felix.logback.itests.immediate.log4j1)'
-runpath: \
ch.qos.logback.classic;version=latest,\
ch.qos.logback.core;version=latest,\
- slf4j.api;version=latest
+ slf4j.api;version=latest,\
+ org.apache.felix.log;version=latest,\
+ org.apache.felix.logback;version=latest
-runsystempackages: \
- org.slf4j;version=${slf4j.api.version},\
- org.slf4j.helpers;version=${slf4j.api.version},\
- org.slf4j.spi;version=${slf4j.api.version}
+ org.slf4j;version=${version_cleanup;${slf4j.api.version}},\
+ org.slf4j.helpers;version=${version_cleanup;${slf4j.api.version}},\
+ org.slf4j.spi;version=${version_cleanup;${slf4j.api.version}}
-runbundles: \
- log4j.over.slf4j;version='[1.7.32,1.7.33)',\
- org.apache.felix.logback.itests.immediate.log4j1;version='[1.0.0,1.0.1)',\
- org.apache.servicemix.bundles.junit;version='[4.13.2,4.13.3)'
\ No newline at end of file
+ log4j.over.slf4j;version='[1.7.32,1.7.33)',\
+ org.apache.felix.log.extension;version='[1.0.0,1.0.1)',\
+ org.apache.felix.logback.itests.immediate.log4j1;version='[1.0.0,1.0.1)',\
+ org.apache.servicemix.bundles.junit;version='[4.13.2,4.13.3)'
\ No newline at end of file
diff --git a/logback/itests/immediate-log4j2/itest.bndrun b/logback/itests/immediate-log4j2/itest.bndrun
index a626507..8ed22d9 100644
--- a/logback/itests/immediate-log4j2/itest.bndrun
+++ b/logback/itests/immediate-log4j2/itest.bndrun
@@ -3,6 +3,7 @@
-runfw: org.apache.felix.framework
-runrequires:\
+ osgi.identity;filter:='(osgi.identity=org.apache.felix.log.extension)',\
osgi.identity;filter:='(osgi.identity=org.apache.felix.logback.itests.immediate.log4j2)'
-runpath: \
@@ -10,14 +11,17 @@
ch.qos.logback.core;version=latest,\
org.apache.logging.log4j.api;version=latest,\
org.apache.logging.log4j.to-slf4j;version=latest,\
- slf4j.api;version=latest
+ slf4j.api;version=latest,\
+ org.apache.felix.log;version=latest,\
+ org.apache.felix.logback;version=latest
-runsystempackages: \
- org.apache.logging.log4j;version=${apache.logging.log4j.version},\
- org.slf4j;version=${slf4j.api.version},\
- org.slf4j.helpers;version=${slf4j.api.version},\
- org.slf4j.spi;version=${slf4j.api.version}
+ org.apache.logging.log4j;version=${version_cleanup;${apache.logging.log4j.version}},\
+ org.slf4j;version=${version_cleanup;${slf4j.api.version}},\
+ org.slf4j.helpers;version=${version_cleanup;${slf4j.api.version}},\
+ org.slf4j.spi;version=${version_cleanup;${slf4j.api.version}}
-runbundles: \
- org.apache.felix.logback.itests.immediate.log4j2;version='[1.0.0,1.0.1)',\
- org.apache.servicemix.bundles.junit;version='[4.13.2,4.13.3)'
\ No newline at end of file
+ org.apache.felix.log.extension;version='[1.0.0,1.0.1)',\
+ org.apache.felix.logback.itests.immediate.log4j2;version='[1.0.0,1.0.1)',\
+ org.apache.servicemix.bundles.junit;version='[4.13.2,4.13.3)'
\ No newline at end of file
diff --git a/logback/itests/immediate-slf4j/itest.bndrun b/logback/itests/immediate-slf4j/itest.bndrun
index b5a8f7e..39995e2 100644
--- a/logback/itests/immediate-slf4j/itest.bndrun
+++ b/logback/itests/immediate-slf4j/itest.bndrun
@@ -3,18 +3,22 @@
-runfw: org.apache.felix.framework
-runrequires:\
+ osgi.identity;filter:='(osgi.identity=org.apache.felix.log.extension)',\
osgi.identity;filter:='(osgi.identity=org.apache.felix.logback.itests.immediate.slf4j)'
-runpath: \
ch.qos.logback.classic;version=latest,\
ch.qos.logback.core;version=latest,\
- slf4j.api;version=latest
+ slf4j.api;version=latest,\
+ org.apache.felix.log;version=latest,\
+ org.apache.felix.logback;version=latest
-runsystempackages: \
- org.slf4j;version=${slf4j.api.version},\
- org.slf4j.helpers;version=${slf4j.api.version},\
- org.slf4j.spi;version=${slf4j.api.version}
+ org.slf4j;version=${version_cleanup;${slf4j.api.version}},\
+ org.slf4j.helpers;version=${version_cleanup;${slf4j.api.version}},\
+ org.slf4j.spi;version=${version_cleanup;${slf4j.api.version}}
-runbundles: \
- org.apache.felix.logback.itests.immediate.slf4j;version='[1.0.0,1.0.1)',\
- org.apache.servicemix.bundles.junit;version='[4.13.2,4.13.3)'
\ No newline at end of file
+ org.apache.felix.log.extension;version='[1.0.0,1.0.1)',\
+ org.apache.felix.logback.itests.immediate.slf4j;version='[1.0.0,1.0.1)',\
+ org.apache.servicemix.bundles.junit;version='[4.13.2,4.13.3)'
\ No newline at end of file
diff --git a/logback/itests/itest-parent/pom.xml b/logback/itests/itest-parent/pom.xml
index cd40dc0..15391bd 100644
--- a/logback/itests/itest-parent/pom.xml
+++ b/logback/itests/itest-parent/pom.xml
@@ -46,7 +46,11 @@
<apache.logging.log4j.version>2.14.1</apache.logging.log4j.version>
<felix.log.version>1.2.5-SNAPSHOT</felix.log.version>
+
<slf4j.api.version>1.7.32</slf4j.api.version>
+ <!-- <slf4j.api.version>2.0.0-alpha4</slf4j.api.version> -->
+ <logback.version>1.2.7</logback.version>
+ <!-- <logback.version>1.3.0-alpha10</logback.version> -->
<animal.sniffer.skip>true</animal.sniffer.skip>
<maven.deploy.skip>true</maven.deploy.skip>
@@ -64,7 +68,7 @@
<dependency>
<groupId>ch.qos.logback</groupId>
<artifactId>logback-classic</artifactId>
- <version>1.2.7</version>
+ <version>${logback.version}</version>
</dependency>
<dependency>
<groupId>org.osgi</groupId>
@@ -99,6 +103,12 @@
<version>1.0.2</version>
</dependency>
<dependency>
+ <groupId>org.apache.aries.spifly</groupId>
+ <artifactId>org.apache.aries.spifly.dynamic.framework.extension</artifactId>
+ <version>1.3.4</version>
+ <scope>runtime</scope>
+ </dependency>
+ <dependency>
<groupId>org.apache.felix</groupId>
<artifactId>org.apache.felix.configadmin</artifactId>
<version>1.9.22</version>
@@ -112,6 +122,18 @@
</dependency>
<dependency>
<groupId>org.apache.felix</groupId>
+ <artifactId>org.apache.felix.log</artifactId>
+ <version>${felix.log.version}</version>
+ <scope>runtime</scope>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.felix</groupId>
+ <artifactId>org.apache.felix.log.extension</artifactId>
+ <version>1.0.0</version>
+ <scope>runtime</scope>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.felix</groupId>
<artifactId>org.apache.felix.logback</artifactId>
<version>1.0.3-SNAPSHOT</version>
<scope>runtime</scope>
diff --git a/logback/itests/standard-equinox-logservice/itest.bndrun b/logback/itests/standard-equinox-logservice/itest.bndrun
index c90ab1f..ed2cd4c 100644
--- a/logback/itests/standard-equinox-logservice/itest.bndrun
+++ b/logback/itests/standard-equinox-logservice/itest.bndrun
@@ -11,9 +11,9 @@
eclipse.log.enabled=false
-runbundles: \
- ch.qos.logback.classic;version='[1.2.7,1.2.8)',\
- ch.qos.logback.core;version='[1.2.7,1.2.8)',\
- org.apache.felix.logback;version='[1.0.3,1.0.4)',\
- org.apache.felix.logback.itests.standard.equinox.logservice;version='[1.0.0,1.0.1)',\
- org.apache.servicemix.bundles.junit;version='[4.13.2,4.13.3)',\
- slf4j.api;version='[1.7.32,1.7.33)'
\ No newline at end of file
+ ch.qos.logback.classic;version='[1.2.7,1.2.8)',\
+ ch.qos.logback.core;version='[1.2.7,1.2.8)',\
+ org.apache.felix.logback;version='[1.0.3,1.0.4)',\
+ org.apache.felix.logback.itests.standard.equinox.logservice;version='[1.0.0,1.0.1)',\
+ org.apache.servicemix.bundles.junit;version='[4.13.2,4.13.3)',\
+ slf4j.api;version='[1.7.32,1.7.33)'
\ No newline at end of file
diff --git a/logback/itests/standard-jbl/itest.bndrun b/logback/itests/standard-jbl/itest.bndrun
index 58ae862..d682dee 100644
--- a/logback/itests/standard-jbl/itest.bndrun
+++ b/logback/itests/standard-jbl/itest.bndrun
@@ -4,15 +4,20 @@
-runrequires:\
osgi.identity;filter:='(osgi.identity=ch.qos.logback.classic)',\
+ osgi.identity;filter:='(osgi.identity=org.apache.felix.log)',\
+ osgi.identity;filter:='(osgi.identity=org.apache.felix.logback)',\
osgi.identity;filter:='(osgi.identity=org.apache.felix.logback.itests.standard.jbl)'
-runproperties: \
org.jboss.logging.provider=slf4j
-runbundles: \
- ch.qos.logback.classic;version='[1.2.7,1.2.8)',\
- ch.qos.logback.core;version='[1.2.7,1.2.8)',\
- org.apache.felix.logback.itests.standard.jbl;version='[1.0.0,1.0.1)',\
- org.apache.servicemix.bundles.junit;version='[4.13.2,4.13.3)',\
- org.jboss.logging.jboss-logging;version='[3.4.2,3.4.3)',\
- slf4j.api;version='[1.7.32,1.7.33)'
\ No newline at end of file
+ ch.qos.logback.classic;version='[1.2.7,1.2.8)',\
+ ch.qos.logback.core;version='[1.2.7,1.2.8)',\
+ org.apache.felix.configadmin;version='[1.9.22,1.9.23)',\
+ org.apache.felix.log;version='[1.2.5,1.2.6)',\
+ org.apache.felix.logback;version='[1.0.3,1.0.4)',\
+ org.apache.felix.logback.itests.standard.jbl;version='[1.0.0,1.0.1)',\
+ org.apache.servicemix.bundles.junit;version='[4.13.2,4.13.3)',\
+ org.jboss.logging.jboss-logging;version='[3.4.2,3.4.3)',\
+ slf4j.api;version='[1.7.32,1.7.33)'
\ No newline at end of file
diff --git a/logback/itests/standard-jcl/itest.bndrun b/logback/itests/standard-jcl/itest.bndrun
index 5be9330..eade6f5 100644
--- a/logback/itests/standard-jcl/itest.bndrun
+++ b/logback/itests/standard-jcl/itest.bndrun
@@ -8,10 +8,10 @@
osgi.identity;filter:='(osgi.identity=org.apache.felix.logback.itests.standard.jcl)'
-runbundles: \
- ch.qos.logback.classic;version='[1.2.7,1.2.8)',\
- ch.qos.logback.core;version='[1.2.7,1.2.8)',\
- log4j.over.slf4j;version='[1.7.32,1.7.33)',\
- org.apache.commons.logging;version='[1.2.0,1.2.1)',\
- org.apache.felix.logback.itests.standard.jcl;version='[1.0.0,1.0.1)',\
- org.apache.servicemix.bundles.junit;version='[4.13.2,4.13.3)',\
- slf4j.api;version='[1.7.32,1.7.33)'
\ No newline at end of file
+ ch.qos.logback.classic;version='[1.2.7,1.2.8)',\
+ ch.qos.logback.core;version='[1.2.7,1.2.8)',\
+ log4j.over.slf4j;version='[1.7.32,1.7.33)',\
+ org.apache.commons.logging;version='[1.2.0,1.2.1)',\
+ org.apache.felix.logback.itests.standard.jcl;version='[1.0.0,1.0.1)',\
+ org.apache.servicemix.bundles.junit;version='[4.13.2,4.13.3)',\
+ slf4j.api;version='[1.7.32,1.7.33)'
\ No newline at end of file
diff --git a/logback/itests/standard-log4j1/itest.bndrun b/logback/itests/standard-log4j1/itest.bndrun
index 8a5897c..c946d03 100644
--- a/logback/itests/standard-log4j1/itest.bndrun
+++ b/logback/itests/standard-log4j1/itest.bndrun
@@ -7,9 +7,9 @@
osgi.identity;filter:='(osgi.identity=org.apache.felix.logback.itests.standard.log4j1)'
-runbundles: \
- ch.qos.logback.classic;version='[1.2.7,1.2.8)',\
- ch.qos.logback.core;version='[1.2.7,1.2.8)',\
- log4j.over.slf4j;version='[1.7.32,1.7.33)',\
- org.apache.felix.logback.itests.standard.log4j1;version='[1.0.0,1.0.1)',\
- org.apache.servicemix.bundles.junit;version='[4.13.2,4.13.3)',\
- slf4j.api;version='[1.7.32,1.7.33)'
\ No newline at end of file
+ ch.qos.logback.classic;version='[1.2.7,1.2.8)',\
+ ch.qos.logback.core;version='[1.2.7,1.2.8)',\
+ log4j.over.slf4j;version='[1.7.32,1.7.33)',\
+ org.apache.felix.logback.itests.standard.log4j1;version='[1.0.0,1.0.1)',\
+ org.apache.servicemix.bundles.junit;version='[4.13.2,4.13.3)',\
+ slf4j.api;version='[1.7.32,1.7.33)'
\ No newline at end of file
diff --git a/logback/itests/standard-slf4j/itest.bndrun b/logback/itests/standard-slf4j/itest.bndrun
index 42f4c2c..c47dc3d 100644
--- a/logback/itests/standard-slf4j/itest.bndrun
+++ b/logback/itests/standard-slf4j/itest.bndrun
@@ -7,8 +7,8 @@
osgi.identity;filter:='(osgi.identity=org.apache.felix.logback.itests.standard.slf4j)'
-runbundles: \
- ch.qos.logback.classic;version='[1.2.7,1.2.8)',\
- ch.qos.logback.core;version='[1.2.7,1.2.8)',\
- org.apache.felix.logback.itests.standard.slf4j;version='[1.0.0,1.0.1)',\
- org.apache.servicemix.bundles.junit;version='[4.13.2,4.13.3)',\
- slf4j.api;version='[1.7.32,1.7.33)'
\ No newline at end of file
+ ch.qos.logback.classic;version='[1.2.7,1.2.8)',\
+ ch.qos.logback.core;version='[1.2.7,1.2.8)',\
+ org.apache.felix.logback.itests.standard.slf4j;version='[1.0.0,1.0.1)',\
+ org.apache.servicemix.bundles.junit;version='[4.13.2,4.13.3)',\
+ slf4j.api;version='[1.7.32,1.7.33)'
\ No newline at end of file
diff --git a/logback/logback/pom.xml b/logback/logback/pom.xml
index 33e66a9..11a2be4 100644
--- a/logback/logback/pom.xml
+++ b/logback/logback/pom.xml
@@ -46,6 +46,11 @@
<maven.compiler.source>1.8</maven.compiler.source>
<maven.compiler.target>1.8</maven.compiler.target>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
+
+ <slf4j.api.version>1.7.32</slf4j.api.version>
+ <!-- <slf4j.api.version>2.0.0-alpha4</slf4j.api.version> -->
+ <logback.version>1.2.7</logback.version>
+ <!-- <logback.version>1.3.0-alpha10</logback.version> -->
</properties>
<dependencies>
@@ -56,9 +61,14 @@
<scope>provided</scope>
</dependency>
<dependency>
+ <groupId>org.slf4j</groupId>
+ <artifactId>slf4j-api</artifactId>
+ <version>${slf4j.api.version}</version>
+ </dependency>
+ <dependency>
<groupId>ch.qos.logback</groupId>
<artifactId>logback-classic</artifactId>
- <version>1.2.7</version>
+ <version>${logback.version}</version>
</dependency>
<dependency>
<groupId>org.eclipse.platform</groupId>
@@ -93,7 +103,11 @@
<version>${bnd.version}</version>
<configuration>
<bnd><![CDATA[
- Import-Package: !org.eclipse.osgi.internal.hookregistry, *
+ Import-Package: \
+ !org.eclipse.osgi.internal.hookregistry,\
+ ch.qos.logback.classic.*;version="[1.2,2)",\
+ org.slf4j.*;version="[1.7,3)",\
+ *
-conditionalpackage: org.slf4j.bridge
]]></bnd>
</configuration>
diff --git a/logback/logback/src/main/java/org/apache/felix/logback/internal/Activator.java b/logback/logback/src/main/java/org/apache/felix/logback/internal/Activator.java
index f539f29..d697ed3 100644
--- a/logback/logback/src/main/java/org/apache/felix/logback/internal/Activator.java
+++ b/logback/logback/src/main/java/org/apache/felix/logback/internal/Activator.java
@@ -15,6 +15,7 @@
package org.apache.felix.logback.internal;
import java.util.AbstractMap.SimpleEntry;
+import java.util.function.Supplier;
import org.osgi.annotation.bundle.Header;
import org.osgi.framework.BundleActivator;
@@ -45,20 +46,25 @@ public class Activator implements BundleActivator {
public LRST addingService(
ServiceReference<LoggerAdmin> reference) {
- LoggerAdmin loggerAdmin = bundleContext.getService(reference);
+ return tccl(() -> {
+ LoggerAdmin loggerAdmin = bundleContext.getService(reference);
- LRST lrst = new LRST(bundleContext, loggerAdmin);
+ LRST lrst = new LRST(bundleContext, loggerAdmin);
- lrst.open();
+ lrst.open();
- return lrst;
+ return lrst;
+ });
}
@Override
public void removedService(
ServiceReference<LoggerAdmin> reference, LRST lrst) {
- lrst.close();
+ tccl(() -> {
+ lrst.close();
+ return null;
+ });
}
};
@@ -70,6 +76,18 @@ public class Activator implements BundleActivator {
lat.close();
}
+ private static <R> R tccl(Supplier<R> action) {
+ Thread currentThread = Thread.currentThread();
+ ClassLoader original = currentThread.getContextClassLoader();
+ try {
+ currentThread.setContextClassLoader(Activator.class.getClassLoader());
+ return action.get();
+ }
+ finally {
+ currentThread.setContextClassLoader(original);
+ }
+ }
+
class LRST extends ServiceTracker<LogReaderService, Pair> {
public LRST(BundleContext context, LoggerAdmin loggerAdmin) {
@@ -82,13 +100,15 @@ public class Activator implements BundleActivator {
public Pair addingService(
ServiceReference<LogReaderService> reference) {
- LogReaderService logReaderService = context.getService(reference);
+ return tccl(() -> {
+ LogReaderService logReaderService = context.getService(reference);
- LogbackLogListener logbackLogListener = new LogbackLogListener(loggerAdmin);
+ LogbackLogListener logbackLogListener = new LogbackLogListener(loggerAdmin);
- logReaderService.addLogListener(logbackLogListener);
+ logReaderService.addLogListener(logbackLogListener);
- return new Pair(logReaderService, logbackLogListener);
+ return new Pair(logReaderService, logbackLogListener);
+ });
}
@Override
@@ -96,7 +116,10 @@ public class Activator implements BundleActivator {
ServiceReference<LogReaderService> reference,
Pair pair) {
- pair.getKey().removeLogListener(pair.getValue());
+ tccl(() -> {
+ pair.getKey().removeLogListener(pair.getValue());
+ return null;
+ });
}
private final LoggerAdmin loggerAdmin;
diff --git a/logback/logback/src/main/java/org/apache/felix/logback/internal/LogbackLogListener.java b/logback/logback/src/main/java/org/apache/felix/logback/internal/LogbackLogListener.java
index 179f81e..6e55de1 100644
--- a/logback/logback/src/main/java/org/apache/felix/logback/internal/LogbackLogListener.java
+++ b/logback/logback/src/main/java/org/apache/felix/logback/internal/LogbackLogListener.java
@@ -14,8 +14,12 @@
package org.apache.felix.logback.internal;
+import java.lang.invoke.MethodHandle;
+import java.lang.invoke.MethodHandles;
+import java.lang.invoke.MethodType;
import java.util.HashMap;
import java.util.Map;
+import java.util.Optional;
import java.util.concurrent.atomic.AtomicBoolean;
import org.osgi.framework.Bundle;
@@ -42,6 +46,19 @@ public class LogbackLogListener implements LogListener, LoggerContextListener {
private static final String EVENTS_SERVICE = "Events.Service";
private static final String LOG_SERVICE = "LogService";
+ private static final MethodHandles.Lookup publicLookup = MethodHandles.publicLookup();
+ private static Optional<MethodHandle> setSequenceNumber = Optional.empty();
+
+ static {
+ MethodType mt = MethodType.methodType(void.class, long.class);
+ try {
+ MethodHandle methodHandle = publicLookup.findVirtual(LoggingEvent.class, "setSquenceNumber", mt);
+
+ setSequenceNumber = Optional.of(methodHandle);
+ } catch (NoSuchMethodException | IllegalAccessException e) {
+ }
+ }
+
volatile LoggerContext loggerContext;
volatile Logger rootLogger;
volatile LoggerContextVO loggerContextVO;
@@ -132,6 +149,14 @@ public class LogbackLogListener implements LogListener, LoggerContextListener {
le.setThrowableProxy(getThrowableProxy(entry.getException()));
le.setTimeStamp(entry.getTime());
+ setSequenceNumber.ifPresent(mh -> {
+ try {
+ mh.bindTo(le).invokeExact(entry.getSequence());
+ } catch (Throwable e) {
+ e.printStackTrace();
+ }
+ });
+
rootLogger.callAppenders(le);
}