001package org.apache.log4j; 002 003import java.lang.reflect.Field; 004import java.lang.reflect.Method; 005 006import org.apache.log4j.helpers.ThreadLocalMap; 007 008public class MDCFriend { 009 010 public static void fixForJava9() { 011 if (MDC.mdc.tlm == null) { 012 MDC.mdc.tlm = new ThreadLocalMap(); 013 MDC.mdc.java1 = false; 014 setRemoveMethod(MDC.mdc); 015 } 016 017 } 018 019 private static void setRemoveMethod(MDC mdc) { 020 try { 021 Method removeMethod = ThreadLocal.class.getMethod("remove"); 022 Field removeMethodField = MDC.class.getDeclaredField("removeMethod"); 023 removeMethodField.setAccessible(true); 024 removeMethodField.set(mdc, removeMethod); 025 } catch (NoSuchMethodException e) { 026 } catch (SecurityException e) { 027 } catch (NoSuchFieldException e) { 028 } catch (IllegalArgumentException e) { 029 } catch (IllegalAccessException e) { 030 } 031 032 } 033}