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é <[email protected]> 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é <[email protected]> --- 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); }
