Use Log4Net and decouple that data sink(s) from your apps. Log4Net lets you log to files, databases, the Windows event log, and others. You can even direct log output to different destinations based on the assembly/class from which it comes, by logging level (Fatal, Error, Warning, Info, etc.) and other filter criteria.
You can even write your own appenders to do just what you need.
All through changing your log4net configuration. You can even adjust the log4net configuration while your app is running. For instance, consider a long-running daemon with logging set to catch fairly high level messages across the app. If you log suddenly starts showing a sudden increase in errors logged, you might want to dial the logging down to a more granular level to get an idea of what's going on. Or perhaps dial it down to a very granular level on the suspect class or assembly to isolate the problem details.
With log4net, you can do that just by tweaking the config file and without bouncing the daemon.