How to log messages _only once_ from all modules ?

Terry Reedy tjreedy at udel.edu
Wed Nov 25 21:03:50 CET 2009


Jean-Michel Pichavant wrote:

> 
> Basically, never configure or add handlers to any logger except for the 
> root logger in your __main__ section. There are very few reasons why you 
> would break this rule. And when you'll be familiar with the logging 
> module you'll when to break it.

I have never used logging, but if and when I have a need for it, the 
advice above and your clear example will be a good guide to getting 
started. Thank you from me too.

tjr

> [server.py]
> 
> import logging
> import logging.handlers
> 
> logger = logging.getLogger(__name__) # you'd better to create the logger 
> at the module level, you may want to log within   the module function
> 
> def aFunction(a, b, ,c):
>    logger.debug('You called aFunction')
> 
> class Server():
>    def __init__(self):
>        self.logger = logger
> 
>    def util(self):
>        self.logger.warning('This message comes from Server module ')
> 
> 
> [client.py]
> 
> import logging
> import logging.handlers
> from server import Server
> 
> logger = logging.getLogger(__name__)
> 
> class Client():
>    def __init__(self):
>        self.logger = logger
> 
>    def client_test(self):
>        self.logger.warning("This message comes from Client module")
> 
> if __name__ == "__main__":
>    rootLogger = logging.getLogger()
>    rootLogger.addHandler(logging.FileHandler("client.log"))
>    rootLogger.handlers[-1].setFormatter(logging.Formatter("%(asctime)s 
> %(name)-12s %(levelname)-8s %(message)s"))
>    rootLogger.setLevel(logging.DEBUG)
>    ser = Server()
>    cli = Client()
>    ser.util()
>    cli.client_test()
> 
> Happy logging,
> 
> Jean-Michel




More information about the Python-list mailing list