Op 28-12-11 18:13, rail shafigulin schreef:
has anyone used python logger before? i'm trying to adapt it for my workplace. right now it is pretty simplistic for me. i'm trying to generate extra output by the LoggerAdapter. however i'm getting errors. specifically i get the following message:

Traceback (most recent call last):
  File "/usr/lib/python3.1/logging/__init__.py", line 770, in emit
    msg = self.format(record)
  File "/usr/lib/python3.1/logging/__init__.py", line 650, in format
    return fmt.format(record)
  File "/usr/lib/python3.1/logging/__init__.py", line 438, in format
    record.message = record.getMessage()
  File "/usr/lib/python3.1/logging/__init__.py", line 308, in getMessage
    msg = msg % self.args
TypeError: not all arguments converted during string formatting
Without reading the code, you are passing too many arguments for a format string.

>>> msg = 'one arg %s and a second %s'
>>> msg % ('foo', 'bar', 'baz') # Pass 3 arguments
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: not all arguments converted during string formatting

Cheers,
Timo


i'm using this <http://docs.python.org/release/3.1.3/library/logging.html#using-loggeradapters-to-impart-contextual-information> documentation. any

here is my code

import logging
import logging.handlers

class TestInfo(object):
  def __init__(self, test_name = None,
               description = '',
               notes = '',
               expected = None,
               actual = None,
               status = 'Fail',
               timestamp = None):
    self.__test_name = test_name
    self.__description = description
    self.__notes = notes
    self.__expected = expected
    self.__actual = actual
    self.__status = status
    self.__timestamp = timestamp

  def __getitem__(self, name):
    """
    To allow this instance to look like a dict.
    """
    result = None
    if 'test_name' == name:
      result = self.__test_name
    elif 'description' == name:
      result = self.__description
    elif 'notes' == name:
      result = self.__notes
    elif 'expected' == name:
      result = self.__expected
    elif 'actual' == name:
      result = self.__actual
    elif 'status' == name:
      status = self.__status
    elif 'timestamp' == name:
      timestamp = self.__timestamp
    else:
      result = self.__dict__.get(name, "?")
    return result

  def __iter__(self):
    """
    To allow iteration over keys, which will be merged into
    the LogRecord dict before formatting and output.
    """
names = ['test_name', 'description', 'notes', 'expected', 'actual', 'status', 'timestamp']
    names.extend(self.__dict__.keys())
    return names.__iter__()

def main():
  testinfo = TestInfo(
    test_name = 'myname',
    description = 'mydescription',
    notes = 'mynotes',
    expected = 'myexpected',
    actual = 'myactual',
    status = 'Fail',
    timestamp = 'mystamp')

  mylogger = logging.getLogger('mylogger')
  mylogger.setLevel(logging.DEBUG)

  filehandler = logging.FileHandler('test.log')
  filehandler.setLevel(logging.DEBUG)

  mylogger.addHandler(filehandler)
  mylogadapter = logger.LoggerAdapter(mylogger, testinfo)
mylogadapter.info <http://mylogadapter.info>('this is a log message', testinfo)

if __name__ == "__main__":
  main()

any help on how to add extra output parameters is appreciated.


_______________________________________________
Tutor maillist  -  Tutor@python.org
To unsubscribe or change subscription options:
http://mail.python.org/mailman/listinfo/tutor

_______________________________________________
Tutor maillist  -  Tutor@python.org
To unsubscribe or change subscription options:
http://mail.python.org/mailman/listinfo/tutor

Reply via email to