Skip to content

Commit d63537c

Browse files
authored
Add MLClassLoaderContextSelector to avoid multiple log4j2 contexts in one application (#98)
1 parent 5dfb745 commit d63537c

File tree

2 files changed

+20
-0
lines changed

2 files changed

+20
-0
lines changed
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
package cpw.mods.modlauncher.log;
2+
3+
import cpw.mods.cl.ModuleClassLoader;
4+
import org.apache.logging.log4j.core.selector.ClassLoaderContextSelector;
5+
6+
/**
7+
* A custom context selector to avoid initializing multiple log4j contexts due to {@link ModuleClassLoader#getParent()} always returning null (as a {@link ModuleClassLoader} can have multiple parents).
8+
* As all {@link ModuleClassLoader}s should get the same log4j context, we just return a static string with "MCL", otherwise we use the default logic
9+
*/
10+
public class MLClassLoaderContextSelector extends ClassLoaderContextSelector {
11+
12+
@Override
13+
protected String toContextMapKey(ClassLoader loader) {
14+
if (loader instanceof ModuleClassLoader) {
15+
return "MCL";
16+
}
17+
return super.toContextMapKey(loader);
18+
}
19+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
Log4jContextSelector=cpw.mods.modlauncher.log.MLClassLoaderContextSelector

0 commit comments

Comments
 (0)