Java

NAVIGATION
CATEGORIES
REFERRENCE
LINKS
  • Logging: SimpleLog not thread-safe

    1 answers - 1167 bytes - related search similar search Add To My Delicious Add To My Stumble Upon Add To My Google Mark Add To My Facebook Add To My Digg Add To My Reddit

    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_FRMAT);
    }
    Is anyone available who could make this change?
    Thanks,
    Martin
    Martin Wilson
    martinw (AT) bright-interactive (DOT) com
    Bright Interactive: successfully delivering interactive websites and
    business applications
    <
    0870 240 6520
  • No.1 | | 1845 bytes | |

    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

    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_FRMAT);
    }

    Is anyone available who could make this change?

    Thanks,
    Martin

    Martin Wilson
    martinw (AT) bright-interactive (DOT) com

    Bright Interactive: successfully delivering interactive websites and
    business applications
    <
    0870 240 6520

    To unsubscribe, e-mail: commons-dev-unsubscribe (AT) jakarta (DOT) apache.org
    For additional commands, e-mail: commons-dev-help (AT) jakarta (DOT) apache.org

Re: Logging: SimpleLog not thread-safe


max 4000 letters.
Your nickname that display:
In order to stop the spam: 1 + 0 =
QUESTION ON "Java"

EMSDN.COM