One thing I forgot to mention is that threads can share a filehandle thru the fileno, so that can help in logging. Your main thread can open the FH to the log, then you send the fileno of the FH to the threads, and they can print to it. See FileHandles and threads