<p>A good friend of mine works for a large asp.net shop, with a web farm with many web servers (dozens).  The application logs exceptions and messages to the event log on each box (not to a centralized location).</p>

<p>Does anyone know of a convenient way to perform unified reporting on event logs on a number of different boxes?</p>

<p>Or, which is better: 
- write tools that connect to each event log on each box?
- change architecture to log events to the database?
- some other mechanism I haven't considered?</p>

I would use
Log4Net
(or something similar) for the logging, saving the files to disk, and rotating log file periodically. (I'm not a big fan of the Windows event log, personally.) Then have a background service on each box which uploads the log file into a database table - keeping track of which log entry came from which box.
This gives simple searching over the whole web farm while maintaining the information about which log entry came from where.
Similar questions:
"Is writing server log files to a database a good idea?"
"Logging for web application"