Hi, I am trying to log events of a Java application to separate log files based on a key set to the ThreadContext. But my key is not reaching child threads (thread created on mouse event) even after setting "log4j2.isThreadContextMapInheritable" to "true" in system properties. Can someone please help me to get this issue resolved?
*My main method:* public class Application { static { System.setProperty("log4j2.isThreadContextMapInheritable","true"); } private final static Logger LOGGER = LogManager.getLogger(Application.class); public static void main(String[] args) throws Exception { ThreadContext.put("cfg","RLS"); LOGGER.info("New window opening!!!"+ThreadContext.get("cfg")); newWindow(); } private static void newWindow() throws Exception { ButtonFrame buttonFrame = new ButtonFrame("Button Demo"); buttonFrame.setSize( 350, 275 ); buttonFrame.setVisible( true ); } } *ButtonFrame class:* public class ButtonFrame extends JFrame{ private final static Logger LOGGER = LogManager.getLogger(NewWindow.class); JButton bChange; JFrame frame = new JFrame("Our JButton listener example"); public ButtonFrame(String title) { super( title ); setLayout( new FlowLayout() ); bChange = new JButton("Click Me!"); bChange.addMouseListener(new MouseListener() { @Override public void mouseClicked(MouseEvent e) { try { LOGGER.info("Mouse clicked!!!"+ThreadContext.get("cfg")); JDialog d = new JDialog(frame, "HI", true); d.setLocationRelativeTo(frame); d.setVisible(true); } catch (Exception e1) { e1.printStackTrace(); } } @Override public void mousePressed(MouseEvent e) {} @Override public void mouseReleased(MouseEvent e) {} @Override public void mouseEntered(MouseEvent e) {} @Override public void mouseExited(MouseEvent e) {} }); add( bChange ); setDefaultCloseOperation( JFrame.EXIT_ON_CLOSE ); } } *My log4j2.properties file:* status = info, error name = PropertiesConfig appenders = rls,otr,routing appender.rls.type = RollingFile appender.rls.name = RollingFile_Rls appender.rls.fileName = D:\\Log4j\\rls_%d{MMdd}.log appender.rls.filePattern = D:\\ Log4j \\rls_%d{MMdd}.log appender.rls.layout.type = PatternLayout appender.rls.layout.pattern = %d{ABSOLUTE} %level{length=1} %markerSimpleName [%C{1}:%L] %m%n appender.rls.policies.type = Policies appender.rls.policies.time.type = TimeBasedTriggeringPolicy appender.rls.policies.time.interval = 1 appender.rls.policies.time.modulate = true appender.rls.policies.size.type = SizeBasedTriggeringPolicy appender.rls.policies.size.size = 100MB appender.rls.strategy.type = DefaultRolloverStrategy appender.rls.strategy.max = 5 appender.otr.type = RollingFile appender.otr.name = RollingFile_Otr appender.otr.fileName = D:\\ Log4j \\otr_%d{MMdd}.log appender.otr.filePattern = D:\\ Log4j \\otr_%d{MMdd}.log appender.otr.layout.type = PatternLayout appender.otr.layout.pattern = %d{ABSOLUTE} %level{length=1} %markerSimpleName [%C{1}:%L] %m%n appender.otr.policies.type = Policies appender.otr.policies.time.type = TimeBasedTriggeringPolicy appender.otr.policies.time.interval = 1 appender.otr.policies.time.modulate = true appender.otr.policies.size.type = SizeBasedTriggeringPolicy appender.otr.policies.size.size = 100MB appender.otr.strategy.type = DefaultRolloverStrategy appender.otr.strategy.max = 5 appender.routing.type = Routing appender.routing.name = Route_Finder appender.routing.routes.type = Routes appender.routing.routes.pattern = $${ctx:cfg} appender.routing.routes.route1.type = Route appender.routing.routes.route1.ref = RollingFile_Rls appender.routing.routes.route1.key = RLS appender.routing.routes.route2.type = Route appender.routing.routes.route2.ref = RollingFile_Button appender.routing.routes.route2.key = BUTTON appender.routing.routes.route3.type = Route appender.routing.routes.route3.ref = RollingFile_Otr appender.routing.routes.route3.key = $${ctx:cfg} loggers = rls,otr logger.rls.name = logging logger.rls.level = info logger.rls.additivity = false logger.rls.appenderRefs=rls logger.rls.appenderRef.rls.ref = Route_Finder logger.otr.name = other logger.otr.level = info logger.otr.additivity = false logger.otr.appenderRefs=otr logger.otr.appenderRef.otr.ref = Route_Finder rootLogger.level = trace rootLogger.appenderRefs = stdout rootLogger.appenderRef.stdout.ref = stdout The logger statement of method mouseClicked() logs the statement to my default log file and not to the file routed with key 'RLS'. Please guide me where I am going wrong. Thanks & Regards, Rahna