Since a running system probably performs 1000s of filelocks per day and they are probably fairly efficient, my first suggestion would be to run a test, with parallel processes writing to a single log file, using a lock on the lock file. Make sure you only hold the lock once your string is fully built though. If you really can't live with the rate you see, then consider other solutions.

At some point, you must pay the price for combining the output into a single file. As many have mentioned, you can hide the latency by doing fancy things (i.e. sending messages via shared memory to a logging process, having a background thread log the message, combining files after the fact, etc), but with most of those you still must synchronize the output and pay a price (perhaps an even higher one overall on machine performance). They are also more complex and subject to their own set of problems (i.e. do all of your processes hang if your separate logging process dies/hangs?).


In reply to Re: Writing to a log file without colliding by bluto
in thread Writing to a log file without colliding by cgraf

Title:
Use:  <p> text here (a paragraph) </p>
and:  <code> code here </code>
to format your post, it's "PerlMonks-approved HTML":



  • Posts are HTML formatted. Put <p> </p> tags around your paragraphs. Put <code> </code> tags around your code and data!
  • Titles consisting of a single word are discouraged, and in most cases are disallowed outright.
  • Read Where should I post X? if you're not absolutely sure you're posting in the right place.
  • Please read these before you post! —
  • Posts may use any of the Perl Monks Approved HTML tags:
    a, abbr, b, big, blockquote, br, caption, center, col, colgroup, dd, del, details, div, dl, dt, em, font, h1, h2, h3, h4, h5, h6, hr, i, ins, li, ol, p, pre, readmore, small, span, spoiler, strike, strong, sub, summary, sup, table, tbody, td, tfoot, th, thead, tr, tt, u, ul, wbr
  • You may need to use entities for some characters, as follows. (Exception: Within code tags, you can put the characters literally.)
            For:     Use:
    & &amp;
    < &lt;
    > &gt;
    [ &#91;
    ] &#93;
  • Link using PerlMonks shortcuts! What shortcuts can I use for linking?
  • See Writeup Formatting Tips and other pages linked from there for more info.