Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Fix Android-related issues in Log4j Core #3071

Merged
merged 2 commits into from
Oct 10, 2024
Merged

Fix Android-related issues in Log4j Core #3071

merged 2 commits into from
Oct 10, 2024

Conversation

ppkarwasz
Copy link
Contributor

This fixes three issues encountered in the log4j-samples-android test project:

  1. Disables the jvmrunargs lookup on Android and fixes it on the other platforms. Previously, the lookup always returned null.
  2. Switches the default context selector to BasicContextSelector on Android. StackLocator is broken on Android: it cannot use our JDK 8 code (missing sun.reflect classes), but also it cannot use our JDK 11+ code (missing multi-release JAR support). This causes ClassLoaderContextSelector to use two different logger contexts for the same classloader.
  3. Fixes a ParserConfigurationException caused by the lack of XInclude capabilities in Android's XML parser. The fix to LOG4J2-3531 didn't cover all the cases.

Closes #3056.
Part of #2832.

This fixes three issues encountered in the [`log4j-samples-android`](https://github.com/apache/logging-log4j-samples/tree/main/log4j-samples-android) test project:

1. Disables the `jvmrunargs` lookup on Android and fixes it on the other platforms. Previously, the lookup always returned `null`.
2. Switches the default context selector to `BasicContextSelector` on Android. `StackLocator` is broken on Android: it cannot use our JDK 8 code (missing `sun.reflect` classes), but also it cannot use our JDK 11+ code (missing multi-release JAR support). This causes `ClassLoaderContextSelector` to use two different logger contexts for the same classloader.
3. Fixes a `ParserConfigurationException` caused by the lack of XInclude capabilities in Android's XML parser. The fix to [LOG4J2-3531](https://issues.apache.org/jira/browse/LOG4J2-3531) didn't cover all the cases.

Closes #3056.
Part of #2832.
@ppkarwasz ppkarwasz self-assigned this Oct 9, 2024
Copy link
Member

@vy vy left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

LGTM. 👍

I would also like to see a F.A.Q. entry for Android (e.g., Does Log4j Core work on Android?) and document that

  • Yes, it works out-of-the-box
  • XInclude is not available
  • BasicContextSelector [link to BCS docs] will be used

@ppkarwasz ppkarwasz marked this pull request as ready for review October 10, 2024 11:43
@ppkarwasz
Copy link
Contributor Author

@vy,

I added a FAQ entry in fbd4ea0.

Since this PR can not be tested, until we publish a snapshot and the external android-test.yaml action succeeds, I am merging this PR.
Feel free to improve the doc on 2.x.

@ppkarwasz ppkarwasz merged commit f7c26cd into 2.x Oct 10, 2024
6 checks passed
@ppkarwasz ppkarwasz deleted the feature/2.x/android branch October 10, 2024 11:46
@ppkarwasz
Copy link
Contributor Author

The CI build 11273365001 confirms that a simple application on Android functions correctly with Log4j Core.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Projects
None yet
Development

Successfully merging this pull request may close these issues.

Error using log4j2 api/core libraries with Android
2 participants