Uploaded image for project: 'CAL10N'
  1. CAL10N
  2. CAL-39

LogbackMDCAdapter.get(String key) not thread safe on Thread.sleep()

    XMLWordPrintable

Details

    • Icon: Bug Bug
    • Resolution: Unresolved
    • Icon: Major Major
    • None
    • None
    • Linux/WebSphere

    Description

      LogbackMDCAdapter.get(String key) returns NULL, after Thread.sleep(..).

      Code example:

      package test.test.testLogger12;

      import java.util.concurrent.ExecutorService;

      .....

      public class LoggerTest {
      ...

      public void init()

      { ...... System.out.println("I'm here"); logger.info(0, "TestLogger started"); logger.addThreadContext("MyLoggerContext"); ExecutorService nativExecutor = executorService.allocateAndGetExecutorService("AA", ExecutorPlatformType.JAVA, ExecutorType.THREAD_POOL, 5, 11, 5, 1000); nativExecutor.execute(new NativeRunnable(loggerApi)); nativExecutor.execute(new NativeRunnable(loggerApi)); nativExecutor.execute(new NativeRunnable(loggerApi)); nativExecutor.execute(new NativeRunnable(loggerApi)); nativExecutor.execute(new NativeRunnable(loggerApi)); }

      //////////////////////////runnables////////////////////////////
      private static int threadCounter = 0;
      public static class NativeRunnable implements Runnable {
      private ILogger logger;
      public NativeRunnable(LoggerApi loggerApi)

      { logger = loggerApi.getLogger(); }

      public void run() {
      logger.addThreadContext("NATIVE_WORKER "threadCounter+);
      logger.info(0, "NATIVE PHOENIX IN");
      try

      { Thread.sleep(10); }

      catch (InterruptedException e)

      { e.printStackTrace(); }

      finally

      { logger.info(0, "NATIVE PHOENIX OUT"); logger.removeThreadContext(); }

      }
      }

      }

      Output example:
      2013-08-05 18:58:15.431 +0300, I, AA-thread-1, testLogger12.testLogger12-business-logic, NATIVE_WORKER 5, NATIVE Alona PHOENIX IN
      2013-08-05 18:58:15.431 +0300, I, AA-thread-3, testLogger12.testLogger12-business-logic, NATIVE_WORKER 6, NATIVE Alona PHOENIX IN
      2013-08-05 18:58:15.431 +0300, I, AA-thread-2, testLogger12.testLogger12-business-logic, NATIVE_WORKER 7, NATIVE Alona PHOENIX IN
      2013-08-05 18:58:15.431 +0300, I, AA-thread-4, testLogger12.testLogger12-business-logic, NATIVE_WORKER 8, NATIVE Alona PHOENIX IN
      2013-08-05 18:58:15.431 +0300, I, AA-thread-5, testLogger12.testLogger12-business-logic, NATIVE_WORKER 9, NATIVE Alona PHOENIX IN
      2013-08-05 18:58:15.443 +0300, I, AA-thread-1, testLogger12.testLogger12-business-logic, NATIVE_WORKER 9, NATIVE Alona PHOENIX OUT
      2013-08-05 18:58:15.443 +0300, I, AA-thread-3, testLogger12.testLogger12-business-logic, NATIVE Alona PHOENIX OUT
      2013-08-05 18:58:15.443 +0300, I, AA-thread-2, testLogger12.testLogger12-business-logic, NATIVE Alona PHOENIX OUT
      2013-08-05 18:58:15.443 +0300, I, AA-thread-4, testLogger12.testLogger12-business-logic, NATIVE Alona PHOENIX OUT
      2013-08-05 18:58:15.444 +0300, I, AA-thread-5, testLogger12.testLogger12-business-logic, NATIVE Alona PHOENIX OUT

      The context key is : NATIVE_WORKER #

      {number}

      , when thread is out it is absent!

      Thank you,
      Alona

      Attachments

        Activity

          People

            ceki Ceki Gülcü
            agokhler Alona Gokhler
            Votes:
            0 Vote for this issue
            Watchers:
            2 Start watching this issue

            Dates

              Created:
              Updated: