You are viewing a plain text version of this content. The canonical link for it is here.
Posted to log4net-dev@logging.apache.org by "Husain Alshehhi (JIRA)" <ji...@apache.org> on 2017/04/05 12:52:41 UTC

[jira] [Updated] (LOG4NET-562) LogicalThreadContext is not per Thread

     [ https://issues.apache.org/jira/browse/LOG4NET-562?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]

Husain Alshehhi updated LOG4NET-562:
------------------------------------
    Description: 
LogicalThreadContext values are spread to many threads when they shouldn't.

This is an example:

{code:title=console.cs|borderStyle=solid}
            LogicalThreadContext.Properties["x-corralation-Id"] = "original-value";

            var list = new List<int> {1, 2, 3, 4, 5, 6, 7, 8, 9, 0};
            Parallel.ForEach(list, (i) =>
            {
                if (i == 3)
                    LogicalThreadContext.Properties["x-corralation-Id"] = "modified-value";

                logger.Info($"thread {i}.");
            });
{code}
this is the result

{code:title=badresult.txt|borderStyle=solid}
{"timestamp":"2017-04-05T12:31:41.117Z", "level":"INFO", "x-corralation-Id" : "original-value", "logger":"logger", "message":"thread 1.", "data":(null)} 
{"timestamp":"2017-04-05T12:31:41.132Z", "level":"INFO", "x-corralation-Id" : "modified-value", "logger":"logger", "message":"thread 3.", "data":(null)} 
{"timestamp":"2017-04-05T12:31:41.273Z", "level":"INFO", "x-corralation-Id" : "modified-value", "logger":"logger", "message":"thread 4.", "data":(null)} 
{"timestamp":"2017-04-05T12:31:41.273Z", "level":"INFO", "x-corralation-Id" : "modified-value", "logger":"logger", "message":"thread 6.", "data":(null)} 
{"timestamp":"2017-04-05T12:31:41.274Z", "level":"INFO", "x-corralation-Id" : "modified-value", "logger":"logger", "message":"thread 8.", "data":(null)} 
{"timestamp":"2017-04-05T12:31:41.274Z", "level":"INFO", "x-corralation-Id" : "modified-value", "logger":"logger", "message":"thread 0.", "data":(null)} 
{"timestamp":"2017-04-05T12:31:41.219Z", "level":"INFO", "x-corralation-Id" : "original-value", "logger":"logger", "message":"thread 7.", "data":(null)} 
{"timestamp":"2017-04-05T12:31:41.179Z", "level":"INFO", "x-corralation-Id" : "original-value", "logger":"logger", "message":"thread 5.", "data":(null)} 
{"timestamp":"2017-04-05T12:31:41.273Z", "level":"INFO", "x-corralation-Id" : "original-value", "logger":"logger", "message":"thread 2.", "data":(null)} 
{"timestamp":"2017-04-05T12:31:41.234Z", "level":"INFO", "x-corralation-Id" : "original-value", "logger":"logger", "message":"thread 9.", "data":(null)} 
{code}

This is what I was expecting:

{code:title=goodresult.txt|borderStyle=solid}
{"timestamp":"2017-04-05T12:31:41.117Z", "level":"INFO", "x-corralation-Id" : "original-value", "logger":"logger", "message":"thread 1.", "data":(null)} 
{"timestamp":"2017-04-05T12:31:41.132Z", "level":"INFO", "x-corralation-Id" : "modified-value", "logger":"logger", "message":"thread 3.", "data":(null)} 
{"timestamp":"2017-04-05T12:31:41.273Z", "level":"INFO", "x-corralation-Id" : "original-value", "logger":"logger", "message":"thread 4.", "data":(null)} 
{"timestamp":"2017-04-05T12:31:41.273Z", "level":"INFO", "x-corralation-Id" : "original-value", "logger":"logger", "message":"thread 6.", "data":(null)} 
{"timestamp":"2017-04-05T12:31:41.274Z", "level":"INFO", "x-corralation-Id" : "original-value", "logger":"logger", "message":"thread 8.", "data":(null)} 
{"timestamp":"2017-04-05T12:31:41.274Z", "level":"INFO", "x-corralation-Id" : "original-value", "logger":"logger", "message":"thread 0.", "data":(null)} 
{"timestamp":"2017-04-05T12:31:41.219Z", "level":"INFO", "x-corralation-Id" : "original-value", "logger":"logger", "message":"thread 7.", "data":(null)} 
{"timestamp":"2017-04-05T12:31:41.179Z", "level":"INFO", "x-corralation-Id" : "original-value", "logger":"logger", "message":"thread 5.", "data":(null)} 
{"timestamp":"2017-04-05T12:31:41.273Z", "level":"INFO", "x-corralation-Id" : "original-value", "logger":"logger", "message":"thread 2.", "data":(null)} 
{"timestamp":"2017-04-05T12:31:41.234Z", "level":"INFO", "x-corralation-Id" : "original-value", "logger":"logger", "message":"thread 9.", "data":(null)} 
{code}

  was:
LogicalThreadContext values are spread to many threads when they shouldn't.

This is an example:

            LogicalThreadContext.Properties["x-corralation-Id"] = "original-value";

            var list = new List<int> {1, 2, 3, 4, 5, 6, 7, 8, 9, 0};
            Parallel.ForEach(list, (i) =>
            {
                if (i == 3)
                    LogicalThreadContext.Properties["x-corralation-Id"] = "modified-value";

                logger.Info($"thread {i}.");
            });

this is the result

{"timestamp":"2017-04-05T12:31:41.117Z", "level":"INFO", "x-corralation-Id" : "original-value", "logger":"logger", "message":"thread 1.", "data":(null)} 
{"timestamp":"2017-04-05T12:31:41.132Z", "level":"INFO", "x-corralation-Id" : "modified-value", "logger":"logger", "message":"thread 3.", "data":(null)} 
{"timestamp":"2017-04-05T12:31:41.273Z", "level":"INFO", "x-corralation-Id" : "modified-value", "logger":"logger", "message":"thread 4.", "data":(null)} 
{"timestamp":"2017-04-05T12:31:41.273Z", "level":"INFO", "x-corralation-Id" : "modified-value", "logger":"logger", "message":"thread 6.", "data":(null)} 
{"timestamp":"2017-04-05T12:31:41.274Z", "level":"INFO", "x-corralation-Id" : "modified-value", "logger":"logger", "message":"thread 8.", "data":(null)} 
{"timestamp":"2017-04-05T12:31:41.274Z", "level":"INFO", "x-corralation-Id" : "modified-value", "logger":"logger", "message":"thread 0.", "data":(null)} 
{"timestamp":"2017-04-05T12:31:41.219Z", "level":"INFO", "x-corralation-Id" : "original-value", "logger":"logger", "message":"thread 7.", "data":(null)} 
{"timestamp":"2017-04-05T12:31:41.179Z", "level":"INFO", "x-corralation-Id" : "original-value", "logger":"logger", "message":"thread 5.", "data":(null)} 
{"timestamp":"2017-04-05T12:31:41.273Z", "level":"INFO", "x-corralation-Id" : "original-value", "logger":"logger", "message":"thread 2.", "data":(null)} 
{"timestamp":"2017-04-05T12:31:41.234Z", "level":"INFO", "x-corralation-Id" : "original-value", "logger":"logger", "message":"thread 9.", "data":(null)} 


This is what I was expecting:

{"timestamp":"2017-04-05T12:31:41.117Z", "level":"INFO", "x-corralation-Id" : "original-value", "logger":"logger", "message":"thread 1.", "data":(null)} 
{"timestamp":"2017-04-05T12:31:41.132Z", "level":"INFO", "x-corralation-Id" : "modified-value", "logger":"logger", "message":"thread 3.", "data":(null)} 
{"timestamp":"2017-04-05T12:31:41.273Z", "level":"INFO", "x-corralation-Id" : "original-value", "logger":"logger", "message":"thread 4.", "data":(null)} 
{"timestamp":"2017-04-05T12:31:41.273Z", "level":"INFO", "x-corralation-Id" : "original-value", "logger":"logger", "message":"thread 6.", "data":(null)} 
{"timestamp":"2017-04-05T12:31:41.274Z", "level":"INFO", "x-corralation-Id" : "original-value", "logger":"logger", "message":"thread 8.", "data":(null)} 
{"timestamp":"2017-04-05T12:31:41.274Z", "level":"INFO", "x-corralation-Id" : "original-value", "logger":"logger", "message":"thread 0.", "data":(null)} 
{"timestamp":"2017-04-05T12:31:41.219Z", "level":"INFO", "x-corralation-Id" : "original-value", "logger":"logger", "message":"thread 7.", "data":(null)} 
{"timestamp":"2017-04-05T12:31:41.179Z", "level":"INFO", "x-corralation-Id" : "original-value", "logger":"logger", "message":"thread 5.", "data":(null)} 
{"timestamp":"2017-04-05T12:31:41.273Z", "level":"INFO", "x-corralation-Id" : "original-value", "logger":"logger", "message":"thread 2.", "data":(null)} 
{"timestamp":"2017-04-05T12:31:41.234Z", "level":"INFO", "x-corralation-Id" : "original-value", "logger":"logger", "message":"thread 9.", "data":(null)} 



> LogicalThreadContext is not per Thread
> --------------------------------------
>
>                 Key: LOG4NET-562
>                 URL: https://issues.apache.org/jira/browse/LOG4NET-562
>             Project: Log4net
>          Issue Type: Bug
>          Components: Other
>    Affects Versions: 2.0.8
>         Environment: Windows 10. VS 16.
>            Reporter: Husain Alshehhi
>
> LogicalThreadContext values are spread to many threads when they shouldn't.
> This is an example:
> {code:title=console.cs|borderStyle=solid}
>             LogicalThreadContext.Properties["x-corralation-Id"] = "original-value";
>             var list = new List<int> {1, 2, 3, 4, 5, 6, 7, 8, 9, 0};
>             Parallel.ForEach(list, (i) =>
>             {
>                 if (i == 3)
>                     LogicalThreadContext.Properties["x-corralation-Id"] = "modified-value";
>                 logger.Info($"thread {i}.");
>             });
> {code}
> this is the result
> {code:title=badresult.txt|borderStyle=solid}
> {"timestamp":"2017-04-05T12:31:41.117Z", "level":"INFO", "x-corralation-Id" : "original-value", "logger":"logger", "message":"thread 1.", "data":(null)} 
> {"timestamp":"2017-04-05T12:31:41.132Z", "level":"INFO", "x-corralation-Id" : "modified-value", "logger":"logger", "message":"thread 3.", "data":(null)} 
> {"timestamp":"2017-04-05T12:31:41.273Z", "level":"INFO", "x-corralation-Id" : "modified-value", "logger":"logger", "message":"thread 4.", "data":(null)} 
> {"timestamp":"2017-04-05T12:31:41.273Z", "level":"INFO", "x-corralation-Id" : "modified-value", "logger":"logger", "message":"thread 6.", "data":(null)} 
> {"timestamp":"2017-04-05T12:31:41.274Z", "level":"INFO", "x-corralation-Id" : "modified-value", "logger":"logger", "message":"thread 8.", "data":(null)} 
> {"timestamp":"2017-04-05T12:31:41.274Z", "level":"INFO", "x-corralation-Id" : "modified-value", "logger":"logger", "message":"thread 0.", "data":(null)} 
> {"timestamp":"2017-04-05T12:31:41.219Z", "level":"INFO", "x-corralation-Id" : "original-value", "logger":"logger", "message":"thread 7.", "data":(null)} 
> {"timestamp":"2017-04-05T12:31:41.179Z", "level":"INFO", "x-corralation-Id" : "original-value", "logger":"logger", "message":"thread 5.", "data":(null)} 
> {"timestamp":"2017-04-05T12:31:41.273Z", "level":"INFO", "x-corralation-Id" : "original-value", "logger":"logger", "message":"thread 2.", "data":(null)} 
> {"timestamp":"2017-04-05T12:31:41.234Z", "level":"INFO", "x-corralation-Id" : "original-value", "logger":"logger", "message":"thread 9.", "data":(null)} 
> {code}
> This is what I was expecting:
> {code:title=goodresult.txt|borderStyle=solid}
> {"timestamp":"2017-04-05T12:31:41.117Z", "level":"INFO", "x-corralation-Id" : "original-value", "logger":"logger", "message":"thread 1.", "data":(null)} 
> {"timestamp":"2017-04-05T12:31:41.132Z", "level":"INFO", "x-corralation-Id" : "modified-value", "logger":"logger", "message":"thread 3.", "data":(null)} 
> {"timestamp":"2017-04-05T12:31:41.273Z", "level":"INFO", "x-corralation-Id" : "original-value", "logger":"logger", "message":"thread 4.", "data":(null)} 
> {"timestamp":"2017-04-05T12:31:41.273Z", "level":"INFO", "x-corralation-Id" : "original-value", "logger":"logger", "message":"thread 6.", "data":(null)} 
> {"timestamp":"2017-04-05T12:31:41.274Z", "level":"INFO", "x-corralation-Id" : "original-value", "logger":"logger", "message":"thread 8.", "data":(null)} 
> {"timestamp":"2017-04-05T12:31:41.274Z", "level":"INFO", "x-corralation-Id" : "original-value", "logger":"logger", "message":"thread 0.", "data":(null)} 
> {"timestamp":"2017-04-05T12:31:41.219Z", "level":"INFO", "x-corralation-Id" : "original-value", "logger":"logger", "message":"thread 7.", "data":(null)} 
> {"timestamp":"2017-04-05T12:31:41.179Z", "level":"INFO", "x-corralation-Id" : "original-value", "logger":"logger", "message":"thread 5.", "data":(null)} 
> {"timestamp":"2017-04-05T12:31:41.273Z", "level":"INFO", "x-corralation-Id" : "original-value", "logger":"logger", "message":"thread 2.", "data":(null)} 
> {"timestamp":"2017-04-05T12:31:41.234Z", "level":"INFO", "x-corralation-Id" : "original-value", "logger":"logger", "message":"thread 9.", "data":(null)} 
> {code}



--
This message was sent by Atlassian JIRA
(v6.3.15#6346)