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

Reply via email to