Simon Kitching wrote on Thursday, October 12, 2006 9:43 AM: > It might do; not sure what the performance of ThreadLocal is. However > the price is extra memory usage: a DateFormatter for every > thread in the > system that ever logs a message.
Hm. Two scenarios: 1/ The Thread dies --> the ThreadLocals are gc'ed 2/ The Thread is pooled --> the DateFormatter is reused Since the DateFormatter is from JDK it does not harm HotDeploy. Do I miss something? OTOH - how much time costs the creation and usage of such an object? Or you might synchronize the usage of the global formatter ... if it is such a rare situation :) - Jörg > > On Wed, 2006-10-11 at 17:42 -0400, Kenneth Xu wrote: >> Hi, >> >> I think a thread local formatter will give us better performance than >> creating one new in every log invocation. >> >> Just my 2 cents, >> >> Thanks, >> Ken >> >> -----Original Message----- >> From: Simon Kitching [mailto:[EMAIL PROTECTED] >> Sent: Wednesday, October 11, 2006 5:05 AM >> To: Jakarta Commons Developers List >> Subject: Re: Logging: SimpleLog not thread-safe >> >> Hi Martin, >> >> Thanks very much for letting us know about this. I think you're right >> about there being a thread-safety issue. >> >> SimpleLog is definitely in use, but obviously this bug will only be >> triggered under pretty rare conditions, and I expect would usually >> just result in a malformed date string which may not be noticed >> anyway. >> >> But it should be fixed; I'll try to do that this weekend. >> >> Regards, >> >> Simon >> >> On Fri, 2006-10-06 at 17:15 +0100, Martin Wilson wrote: >>> Hi, >>> >>> I'm not sure if anyone else uses the SimpleLog class - anyway I've >>> noticed that SimpleLog.log is not thread-safe. The following code >>> (starting on line 282): >>> >>> if(showDateTime) { >>> buf.append(dateFormatter.format(new Date())); >>> buf.append(" "); } >>> >>> makes an unsynchronized call to dateFormatter.format. As >>> dateFormatter is an instance variable, and DateFormat.format is not >>> thread-safe, this will cause problems if more than one thread tried >>> to log at the same time. >>> >>> Solution: remove the dateFormatter instance variable and >>> instantiate a new DateFormat each time in the log method, e.g. >>> >>> DateFormat dateFormatter = null; >>> try { >>> dateFormatter = new >>> SimpleDateFormat(dateTimeFormat); >>> } >>> catch(IllegalArgumentException e) { >>> dateFormatter = new >>> SimpleDateFormat(DEFAULT_DATE_TIME_FORMAT); >>> } >>> >>> Is anyone available who could make this change? >>> >>> Thanks, >>> Martin >> >>> ___________ >>> >>> Martin Wilson >>> [EMAIL PROTECTED] >>> >>> Bright Interactive: successfully delivering interactive websites >>> and business applications <http://www.bright-interactive.com/> > http://www.bright-interactive.com >>> 0870 240 6520 >>> >> >> >> > --------------------------------------------------------------------- >> To unsubscribe, e-mail: [EMAIL PROTECTED] >> For additional commands, e-mail: [EMAIL PROTECTED] >> >> >> > --------------------------------------------------------------------- >> To unsubscribe, e-mail: [EMAIL PROTECTED] >> For additional commands, e-mail: [EMAIL PROTECTED] >> > > > --------------------------------------------------------------------- > To unsubscribe, e-mail: [EMAIL PROTECTED] > For additional commands, e-mail: [EMAIL PROTECTED] --------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]