Logging Messages
****************

Logging is built into GloMPO and you can optionally configure its
logging capability before running the manager to track its progress.
Without this manual configuration, no progress or status messages will
print at all. The logging system can be used to debug the code, but is
most helpful in tracking execution through the program by sending
logging.INFO level messages and above to "sys.stdout".

The logging provided in this way is distinct from the summary files
provided at the end of the GloMPO run which are regulated by
"GloMPOManager.summary_files".

The GloMPO logger is called "'glompo'" and components have individual
loggers too, allowing filtering if desired. These are:
"'glompo.manager'", "'glompo.exitcondition'", "'glompo.logger'",
"'glompo.generator'", "'glompo.stopper'", "'glompo.selector'" and
"'glompo.optimizers'". Logging from optimizers can be accessed
collectively via "'glompo.optimizers'" or individually for each
optimizer via "'glompo.optimizers.optX'" where "'X'" is the ID number
of the optimizer (see "SplitOptimizerLogs" for the "logging.Filter"
needed to achieve this).

Within user-written plug-ins, such as custom stoppers and exit
conditions, a "logger" attribute (instance of "logging.Logger") is
present and can be used to log behavior. See the Python documentation
for the "logging" package for details on how to customize this
functionality.

An example configuration may look like:

   formatter = logging.Formatter("%(asctime)s : %(levelname)s : %(lineno)d : %(name)s :: %(message)s")

   handler = logging.FileHandler('glompo.opt_log', 'w')
   handler.setFormatter(formatter)

   logger = logging.getLogger('glompo')
   logger.addHandler(handler)
   logger.setLevel('INFO')

   manager = GloMPOManager(...)
   manager.start_manager(...)
