What OS? if unix you may find that syslog will do this very well, you may use modules from CPAN such as
Tie::Syslog to make pushing to syslog as easy as
print LOG "Error, did not open blah\n"; then you may configure syslog to point to a syslog master host that accepts syslog messages from all o the slaves and logs them centrally. Also if the clients are windows or a mix and the logging master is unix you may use
Net::Syslog to directly post syslog messages to a syslog server.
-Waswas