How to log messages _only once_ from all modules ?
Ron Barak
rbarakx at gmail.com
Tue Nov 24 09:07:49 EST 2009
On Nov 24, 3:45 pm, Soltys <sol... at noabuse.com> wrote:
> 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 readinghttp://docs.python.org/library/logging.htmldidn'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 athttp://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"- Hide quoted text -
>
> - Show quoted text -
Hi Soltys,
I actually tried that, without any noticeable effects, viz.:
$ cat server.py
import logging
import logging.handlers
class Server():
def __init__(self):
self.client_logger = logging.getLogger("client")
self.client_logger.setLevel(logging.DEBUG)
h = logging.FileHandler("client.log")
h.setLevel(logging.DEBUG)
formatter = logging.Formatter("%(asctime)s %(name)-12s %
(levelname)-8s %(message)s")
h.setFormatter(formatter)
self.client_logger.addHandler(h)
self.client_logger.propagate = 0
def util(self):
self.client_logger.warning('This message comes from Server
module')
$ cat client.py
import logging
import logging.handlers
from server import Server
class Client():
def __init__(self):
self.client_logger = logging.getLogger("client")
self.client_logger.setLevel(logging.DEBUG)
h = logging.FileHandler("client.log")
h.setLevel(logging.DEBUG)
formatter = logging.Formatter("%(asctime)s %(name)-12s %
(levelname)-8s %(message)s")
h.setFormatter(formatter)
self.client_logger.addHandler(h)
self.client_logger.propagate = 0
def client_test(self):
self.client_logger.warning("This message comes from Client
module")
if __name__ == "__main__":
ser = Server()
cli = Client()
ser.util()
cli.client_test()
$ rm client.log ; python client.py ; cat client.log
2009-11-24 16:06:35,710 client WARNING This message comes from
Server module
2009-11-24 16:06:35,710 client WARNING This message comes from
Server module
2009-11-24 16:06:35,710 client WARNING This message comes from
Client module
2009-11-24 16:06:35,710 client WARNING This message comes from
Client module
$
More information about the Python-list
mailing list