in reply to Can Log4perl's DBI Appender be used in multithread?

As you discovered, most DBI interfaces don't like it when you create multiple threads and they each try to use the same database handle. This is nothing to to with log4perl.

Assuming your database will allow multiple clients to connect at once. (Almost all do), then the simple solution is for each thread to have it's own database connection.

Off the top of my head I don't know how to make the DBI appender create a new connection, but there should be a way do to it, as this will be a common problem.

  • Comment on Re: Can Log4perl's DBI Appender be used in multithread?

Replies are listed 'Best First'.
Re^2: Can Log4perl's DBI Appender be used in multithread?
by BruceCui (Initiate) on Apr 14, 2011 at 01:55 UTC
    Guys thanks a lot for your input. I'll try to find a way to make log4perl get new connection during new threads. But meanwhile can anyone share the experience if he/she happened to meet the same issue or learned about the solution before?
      share the experience if he/she happened to meet the same issue

      Well, duh, mixing DBI and threads in the wrong way causes crashes, exactly those that you experienced. You are not alone.

      Do you feel better now?

      learned about the solution

      Create threads before calling DBI->connect(), as explained in the fine manual.

      I'll try to find a way to make log4perl get new connection during new threads.

      CHANGING DBH CONNECTIONS (POOLING) sounds promising.

      Alexander

      --
      Today I will gladly share my knowledge and experience, for there are no sweeter words than "I told you so". ;-)