logcontrol

A logger manager for Python programs


Keywords
debug, log, logging, logger, level, control, manager, log-management, log-manager, python
Licenses
LGPL-3.0/GPL-3.0+
Install
pip install logcontrol==0.2.1

Documentation

logcontrol: A logger manager for Python programs

It provides:
  • Centralized control of log level (per-group)
Original use case:
  • Python GUI program containing many packages and modules
  • Each source file that logs creates a proper logger for use within that file
    • e.g. logger = logging.getLogger(__name__)
    • This allows a good logging hierarchy for control at a central point
  • I wanted to simplify enabling debug level for specific packages or groups
Installation:
  • pip install logcontrol

    (Tested for Python >=3.6.5 on Linux (Ubuntu) and Windows 7/10)

Usage:
  • example (where otherpackage and anotherpackage are example names):

    # imports of fictitious packages
    import otherpackage
    import anotherpackage
    
    import logging
    import logcontrol
    
    # Register loggers you wish to control.
    # You can have user-friendly names for the groups if you wish:
    logcontrol.register_logger(otherpackage.logger, group='Other Package')
    
    # Set output file for the root logger:
    logcontrol.set_log_file('main_log.txt')
    
    # Enable specific log levels per-group:
    logcontrol.set_level(logging.DEBUG, group='Other Package')
    
    # Make specific groups log to console while debugging:
    logcontrol.log_to_console(group='Other Package')
    
    # You can even disable or enable propagation per-group:
    logcontrol.disable_propagation(group='Other Package')
    logcontrol.enable_propagation(group='Other Package')
    
    # Loggers added to the same group will get the same configuration.
    # This would automatically set DEBUG level and attach the console logging handler:
    logcontrol.register_logger(anotherpackage.module.logger, group='Other Package')
    
    # You can get a dict of group names with level names (good for populating a debug/log control popup):
    logcontrol.group_level_names()
    
    # For convenience, the predefined log levels are available:
    #     - as integers via logcontrol.log_level_integers
    #     - as strings via logcontrol.log_level_strings
    #
    # This makes it easy to display them in a combo box for users to choose.