[Python] Should I reuse a handler between loggers?

Discussão em 'Python' iniciado por Stack, Março 26, 2025.

  1. Stack

    Stack Membro Participativo

    Should I reuse a handler between loggers? It looks like I can:

    import logging
    import sys

    fmt = logging.Formatter('My little handler:\t%(message)s')
    handler = logging.StreamHandler(sys.stdout) # for testing purposes (in reality this goes to a log file)
    handler.setFormatter(fmt)

    logger_1 = logging.getLogger("Numero uno")
    logger_1.addHandler(handler)
    logger_1.setLevel(logging.INFO)

    logger_2 = logging.getLogger("Numero duo")
    logger_2.addHandler(handler)
    logger_2.setLevel(logging.DEBUG)

    logger_1.info("Info to 1")
    logger_2.info("Info to 2")
    logger_1.debug("Debug to 1")
    logger_2.debug("Debug to 2")

    # Output is as expected:
    # My little handler: Info to 1
    # My little handler: Info to 2
    # My little handler: Debug to 2


    But should I? Is there anything that could go wrong with such a setup?

    In case it matters, my intended use case is as follows

    • many loggers (one per module)
    • two handlers per logger
      • one handler shared by all loggers: everything of level INFO or more is written to main.log, with a consistent formatting
      • one logger-specific handler: everything (even DEBUG statements) from module foo is written to foo.log (but formatting may be different across modules/loggers).

    Continue reading...

Compartilhe esta Página