Log4net (http://logging.apache.org/log4net/) is a tool to help the programmer output log statements to a variety of output targets, i have used it handling all the logging requirements of the applications that i have developed recently. And have found it integrates very well with spring.net and NHibernate.
In most cases i have set up the apps to log everything to a file and also log errors/warnings to an SMTP logger (which effectively sends an email out to me).
There are loads of examples and manuals etc on the website http://logging.apache.org/log4net/ it gives loads of good config examples too.
In order to get log4net working all you need is the log4net dll, configuration, and a small amount of code to get it started and logging. (this page is a good read http://logging.apache.org/log4net/release/manual/configuration.html)
But the minimum to take away is:
1. Reference the log4net dll
2. Import the log4net classes
2.1. using log4net;
2.2. using log4net.Config;
3. Add a config file (usually just a section to your web.config or app.config)
4. Add a call to the configurator
4.2. Or [assembly: log4net.Config.XmlConfigurator?(Watch=true)]
5. Create a logger
5.1. private static readonly ILog log = LogManager?.GetLogger?(typeof(MyClassName?));
5.2. each class should have its own logger, which should be private and static (log4net is thread safe)
6. Use the logger to log
6.1. log.Info("my info message.");
If you find you are getting double entries for log records it is probably due to you having duplicated entries in the log config. For example you might have the root set to debug logging and a named logger also set to debug, which will mean that 2 log entries get inserted for all debug messages from that named logger.