Barak, Ron wrote:
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:
[snip example]
Could you suggest what should I change in the above scripts so that
the log messages would appear only once ?
Thanks,
Ron.
If you are starting with the logging facility, I would suggest to add
handlers only to the root logger (in your __main__ section).
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.
[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
--
http://mail.python.org/mailman/listinfo/python-list