Use log4net. Seriously.
By using such a standard and ubiquitous library you get guidance from people who have spent a long time thinking about this very problem. The solution is that most logging libraries have several levels of logging.
In log4net for example I can do
ILog log = LogManager.GetLogger("some logger");
log.Debug("some debugging info");
log.Info("some message meaningful in the domain");
log.Warn("something might be occurring that merits your attention");
log.Error("Everything just went to hell")
The application administrator can then set different levels of logging that he is interested in seeing. It is possible to even allow him to change this configuration at runtime. As a matter of fact, with a robust logging library like log4net you can direct different logging levels from different sources to different appenders. For example you can have a rolling file with all logging messages for the last week stored on the hard-disk, all info, warning, and error messages that do not originate in your data-access layer pushed into a database, and all Errors sent to you via Email.
I think what you are describing falls pretty clearly under the "debug" log level.
You can of course implement logging levels on your own but if anyone using your library is interested in seeing all debugging information, they will have to learn your system, in addition to whatever one they're using. Better to standardize.
So best-practices:
- Use different logging levels.
- Don't roll your own logging framework, use log4net (which really is in this day and age fairly standard) or at the very least Microsoft's entlib logging block.