See this question for another comprehensive answer: When should I use Tracing vs Logger.NET, Enterprise Library, log4net or Ukadc.Diagnostics?
In short, the main available base logging systems are the built-in .NET Framework System.Diagnostics, log4net, NLog, and Enterprise Library application block.
A comparison of these basic structures is available at: https://essentialdiagnostics.codeplex.com/wikipage?title=Comparison
1) Manage log files
All of the basic structures listed above support sliding files, but I think they leave you clean.
eg. in the past, I used a Windows scheduled task that uses robocopy with "/ mov / minage X" to move old files to another location, then delete or something else.
The EventSchemaTraceListener function used by System.Diagnostics, which I recently posted on the blog , has the LimitedCircularFiles parameter, but there is not much support for the log viewer tool (they are in XML).
2) The ability to send e-mail to certain types of registered messages (for example, errors)
All the main structures listed above support this either directly or through extensions (additional listeners).
3) The ability to write messages to the Windows event log
Again, all major frameworks support this, but I usually recommend that writing to the Windows event log is done directly, not through tracing.
One of the problems is what you asked about to automatically create sources.
Any entry in the event log (which passes through EventLog.WriteEvent) will automatically try to create a source in the first message of the log, if it does not exist - the problem is security, only administrators can create sources, so it does not work as a regular user.
Because of this, you really need to add an EventLogInstaller so that the source is created during installation (installation is done by the administrator). After creation, any process can then write to the source.
This leads to my recommendation that you need to create and write code in the event log to ensure that the source of the event log is the same. In addition, if you write to the event log, you do not want it to "disable it" through the wrong configuration.
My personal recommendation is for the .NET Framework System.Diagnostics utility, in particular the Service Trace Viewer is great for diagnosing problems, especially in multi-level multi-threaded environments, if WCF is used, where it can be correlated, identifies different levels.