View Javadoc
1   package org.apache.log4j;
2   
3   import java.lang.reflect.Field;
4   import java.lang.reflect.Method;
5   
6   import org.apache.log4j.helpers.ThreadLocalMap;
7   
8   public class MDCFriend {
9   
10      public static void fixForJava9() {
11          try {
12              Field mdcField = MDC.class.getDeclaredField("mdc");
13  
14              MDC mdcSingleton = (MDC) mdcField.get(null);
15              Field tlmField = MDC.class.getDeclaredField("tlm");
16  
17              Field java1Field = MDC.class.getDeclaredField("java1");
18              Object mdcSingleton_tlm = tlmField.get(mdcSingleton);
19  
20              if (mdcSingleton_tlm == null) {
21                  tlmField.set(mdcSingleton, new ThreadLocalMap());
22                  java1Field.setBoolean(mdcSingleton, false);
23                  setRemoveMethod(mdcSingleton);
24              }
25          } catch (SecurityException e) {
26              e.printStackTrace();
27          } catch (NoSuchFieldException e) {
28              e.printStackTrace();
29          } catch (IllegalArgumentException e) {
30              e.printStackTrace();
31          } catch (IllegalAccessException e) {
32              e.printStackTrace();
33          }
34  
35      }
36  
37      private static void setRemoveMethod(org.apache.log4j.MDC mdc) {
38          try {
39              Method removeMethod = ThreadLocal.class.getMethod("remove");
40              Field removeMethodField = MDC.class.getDeclaredField("removeMethod");
41              removeMethodField.setAccessible(true);
42              removeMethodField.set(mdc, removeMethod);
43          } catch (NoSuchMethodException e) {
44              e.printStackTrace();
45          } catch (SecurityException e) {
46              e.printStackTrace();
47          } catch (NoSuchFieldException e) {
48              e.printStackTrace();
49          } catch (IllegalArgumentException e) {
50              e.printStackTrace();
51          } catch (IllegalAccessException e) {
52              e.printStackTrace();
53          }
54  
55      }
56  }