On May 23, 2010, at 9:46 AM, Frank GOENNINGER wrote:


Hi all:

Being completely new to Python still (just about a week into it now) I
tried to follow the Python 2.6.5 version documemtation aiming at setting
up a logger as follows:

<code>

import logging

global gPIBLogger

class PIBLogger(object):
   '''
   TODO: classdocs
   '''

   def __init__(self, logFileName):
       '''
       Constructor
       '''
       self.logFileName = logFileName
       self.logger = logging.getLogger('PIBLogger')
       self.logger.setLevel(logging.DEBUG)
handler = logging.handlers.RotatingFileHandler(self.logFileName, maxBytes=1000000,
                                                      backupCount=9)
       self.logger.addHandler(handler)
       gPIBLogger = self.logger


def main():
   mylogger = PIBLogger('/tmp/pib.log')
   gPIBLogger.debug(' Hi ')

if __name__ == "__main__":
   main()

</code>

When trying to execute main() I get:

Traceback (most recent call last):
 File "/.../src/pib/logging.py", line 37, in <module>
   main()
 File "/.../src/pib/logging.py", line 33, in main
   mylogger = PIBLogger('/tmp/pib.log')
 File "/...src/pib/logging.py", line 23, in __init__
   self.logger = logging.getLogger('PIBLogger')
AttributeError: 'module' object has no attribute 'getLogger'

I double checked and yes, getLogger is there. Why is the interpreter
asking for an "attribute" here ? Any hints on what I am doing wrong ?


Short answer: Change the name of src/pib/logging.py to something else.

Long answer: When Python hits the line "import logging", it first looks in the current directory and imports logging.py, which in this case is the file it's already executing. It never finds the standard library's logging module.

One way you could have figured this out would be to add this as the first line of main():
   print dir(logging)

That would have told you what Python thought the logging module looked like, and would have perhaps recognized it as your own.

Cheers
Philip



--
http://mail.python.org/mailman/listinfo/python-list

Reply via email to