How to log messages _only once_ from all modules ?
Soltys
soltys at noabuse.com
Tue Nov 24 08:45:02 EST 2009
Barak, Ron pisze:
> Hi,
>
> I'm trying to add the logging module to my application, but I seem to be missing something.
> My application (a wxPython one) has a main script that calls various helper classes.
> I want the log messages from all modules to go to one central log file.
>
> When I implement logging, I think that due to preparation, I get the same message more than once.
>
> Here's an example:
>
> $ cat -n server.py
> 1 import logging
> 2 import logging.handlers
> 3
> 4 class Server():
> 5 def __init__(self):
> 6 self.client_logger = logging.getLogger("client")
> 7 self.client_logger.setLevel(logging.DEBUG)
> 8 h = logging.FileHandler("client.log")
> 9 h.setLevel(logging.DEBUG)
> 10 formatter = logging.Formatter("%(asctime)s %(name)-12s %(levelname)-8s %(message)s")
> 11 h.setFormatter(formatter)
> 12 self.client_logger.addHandler(h)
> 13
> 14 def util(self):
> 15 self.client_logger.warning('This message comes from Server module')
>
> $ cat -n client.py
> 1 import logging
> 2 import logging.handlers
> 3 from server import Server
> 4
> 5 class Client():
> 6 def __init__(self):
> 7 self.client_logger = logging.getLogger("client")
> 8 self.client_logger.setLevel(logging.DEBUG)
> 9 h = logging.FileHandler("client.log")
> 10 h.setLevel(logging.DEBUG)
> 11 formatter = logging.Formatter("%(asctime)s %(name)-12s %(levelname)-8s %(message)s")
> 12 h.setFormatter(formatter)
> 13 self.client_logger.addHandler(h)
> 14
> 15 def client_test(self):
> 16 self.client_logger.warning("This message comes from Client module")
> 17
> 18 if __name__ == "__main__":
> 19 ser = Server()
> 20 cli = Client()
> 21 ser.util()
> 22 cli.client_test()
> $ rm client.log ; python client.py ; cat client.log
> 2009-11-24 14:40:39,762 client WARNING This message comes from Server module
> 2009-11-24 14:40:39,762 client WARNING This message comes from Server module
> 2009-11-24 14:40:39,762 client WARNING This message comes from Client module
> 2009-11-24 14:40:39,762 client WARNING This message comes from Client module
> Googling and reading http://docs.python.org/library/logging.html didn't enlighten me.
>
> Could you suggest what should I change in the above scripts so that the log messages would appear only once ?
>
> Thanks,
> Ron.
>
>
Have a look at http://docs.python.org/library/logging.html#logger-objects
First thing mentioned is Logger.propagate which is, what I believe, you're
looking for ;)
--
Soltys
"Free software is a matter of liberty not price"
More information about the Python-list
mailing list