Sorry I forgot to mention : My application is multithreaded and the log4net
version = 1.2.12


On Thu, Jul 24, 2014 at 10:32 AM, Ananth Tatachar <ananth.tatac...@gmail.com
> wrote:

> Hi Dominik Psenner ,
>
> Thanks a lot for replying , I am really sorry about my bad explanation of
> my problem.
>
> I am trying to create a custom Json Layout ,
>
>
> ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
> 1) The custom layout class:
>
>
>  class MyJsonLayout:LayoutSkeleton
>     {
>         private HashSet<String> IncludeFieldsList { get; set; }
>
>         public override void ActivateOptions()
>         {
>
>         }
>
>         public override void Format(TextWriter writer, LoggingEvent
> loggingEvent)
>         {
>             if(writer == null || loggingEvent == null)
>             {
>                 throw new ArgumentNullException();
>             }
>             var myJsonObj = new MyJsonObject(loggingEvent,
> IncludeFieldsList );
>             var json =
> JsonConvert.SerializeObject(myJsonObj,Formatting.None);
>             writer.WriteLine(json);
>         }
>     }
>
>
> -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
>
> 2) The MyJsonObject class:
>
> [JsonObject(MemberSerialization.OptIn)]
> class MyJsonObject
>     {
>         [JsonProperty("@timestamp")]
>         private DateTime TimeStamp { get; set; }
>
>         [JsonProperty("@message", NullValueHandling =
> NullValueHandling.Ignore)]
>         private String Message { get; set; }
>
>         [JsonProperty("@tid", NullValueHandling =
> NullValueHandling.Ignore)]
>         private String Tid {get;set;}
>
>         [JsonObject(MemberSerialization.OptIn)]
>         private String MyGuid {get;set;}
>
>        public MyJsonObject(LoggingEvent loggingEvent)
>        {
>             var lgData = loggingEvent.GetLoggingEventData(); // For some
> reason if I dont do this , all the loggingEvent.Properties are null. I did
> not understand this.
>             TimeStamp = loggingEvent.TimeStamp;
>             MyGuid = loggingEvent.Properties["myguid"];
>             //loggingEvent.Properties.Remove("myguid"); I tried doing this
> , but nothing changed in my output.
>             Message = loggingEvent.Properties["message"];
>             Tid = loggingEvent.Properties["tid"];
>        }
>
>     }
>
>
> --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
>
> 3) The Place where I put data into log4net.ThreadContext.Properties:
>
> class MyInstatntiationClass
>     {
>         log4net.ThreadContext.Properties["myguid"] =
> Guid.NewGuid().ToString();
>         log4net.ThreadContext.Properties["tid"]
> = System.Threading.Thread.CurrentThread.ManagedThreadId.ToString();
>     }
>
>
>
> ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
>
> 4) My Web.config file:
>
>
>
> <appender name="RollingLocalFileAppender"
> type="log4net.Appender.RollingFileAppender">
>       <file type="log4net.Util.PatternString" value="C:\Logs\JSON.log" />
>       <rollingStyle value="Date" />
>       <datePattern value="yyyy-MM-dd" />
>       <maxSizeRollBackups value="10" />
>       <appendToFile value="true" />
>       <layout type="MyJsonLayout, Version=1.0.0.0, Culture=neutral">
>       </layout>
>     </appender>
>
>
>
> --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
>
> 5) Output file:
>
>
> {"@timestamp":"2014-07-24T10:20:32.1223183-04:00"
> ,"@tid":"5","@myguid":dfg134xcd_dfe-123uier00"}
> {"@timestamp":"2014-07-24T10:20:32.3213382-04:00","@tid":"5","@myguid":
> dfg134xcd_dfe-123uier00"}
> {"@timestamp":"2014-07-24T10:20:32.8273888-04:00","@tid":"5","@myguid":
> dfg134xcd_dfe-123uier00"}
> {"@timestamp":"2014-07-24T10:20:32.8273888-04:00","@tid":"6
> ","@myguid":fgsg4678xzv-adfry-2356i"}
>
>
> Expected behaviour:
>
> Each of my calls should result in unique guids. But as you can see I am
> getting stale guids.
>
>
>
> ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
>
>
> I have two concerns :
>
> 1) As you can see in the output file the guid are stale. While executing I
> carefully monitered the place where guid is being generated : in file
> number 3 in this file: MyInstatntiationClass.
> All the generated guids were unique , however while logging I got stale
> data. Also One other thing I noticed was , when I put the current thread
> to sleep for 50 ms , I see valid unique guids in the output.
> I believe old thread data is being used.
>
>
> 2) I did not understand the use of LoggingEventData. In file number 2 :
> MyJsonObject , If I dont make this call :var lgData =
> loggingEvent.GetLoggingEventData(); I get null values from
> loggingEvent.Properties.
>
>
>
>
> Thanks a lot for your help in advance ...
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
> On Thu, Jul 24, 2014 at 2:40 AM, Dominik Psenner <dpsen...@gmail.com>
> wrote:
>
>> Hi Ananth Tatachar,
>>
>> I'm having a hard time understanding your problem. Can you provide us a
>> sample application including all the code together with both a broken
>> sample output and a expected sample output? It would also be interesting
>> which exact version of log4net you are using.
>>
>> Best regards
>>
>>
>>
>> 2014-07-24 2:31 GMT+02:00 Ananth Tatachar <ananth.tatac...@gmail.com>:
>>
>>
>>>
>>> ---------- Forwarded message ----------
>>> From: Ananth Tatachar <ananth.tatac...@gmail.com>
>>> Date: Wed, Jul 23, 2014 at 8:24 PM
>>> Subject: Log4net.ThreadContext.Properties Having stale data. How to
>>> resolve it?
>>> To: log4net-user@logging.apache.org
>>>
>>>
>>> I am using a RollingFileAppender , and my own custom layout. My
>>> application is multithreaded. Each thread will generate unique random data
>>> and is supposed to log it using log4net framework. However if I create
>>> multiple threads in quick succession I notice stale data in my logs , this
>>> goes away if each thread sleeps for 50 ms before logging. I am not able to
>>> figure out a solution to this issue or find its cause please do help me.
>>>
>>> My logging function looks like this:
>>>
>>>
>>>     log4net.ThreadContext.properties["randomGeneratedData"] =
>>> randomGeneratedData;
>>>     private ILog myLog =
>>>            LogManager.GetLogger(typeof(LogTest));
>>>     using (log4net.NDC.Push("ndcTest1"))
>>>     {
>>>         using (log4net.NDC.Push("ndcTest2"))
>>>             {
>>>                 myLog.Info("myLogTest");
>>>             }
>>>     }
>>>
>>>
>>>
>>>
>>>
>>> Result of logging:
>>>
>>>         NDC = "ndcTest1 ndcTest2" , randomGeneratedData = rad1
>>>        NDC = "ndcTest1 ndcTest2" , randomGeneratedData = rad2
>>>        NDC = "", randomGeneratedData = rad2
>>>
>>> and so on ...
>>>
>>>
>>> I tried to clear log4net.ThreadContext.Properties before filling it
>>> again , but it was of no use. Please help.
>>>
>>>
>>
>>
>> --
>> Dominik Psenner
>>
>
>

Reply via email to