| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051 |
- import logging
- from twisted.python import reflect
- from twisted.python import log
- from BTL import defer # for failure decoration
- class LogLogObserver(log.FileLogObserver):
- """Log observer that writes to a python logger."""
- def __init__(self, error_log_level, info_log_level ):
- self.error_log_level = error_log_level
- self.info_log_level = info_log_level
- def emit(self, eventDict):
- system = eventDict['system']
- if system == '-':
- system = 'twisted'
- else:
- system = 'twisted.' + system
- logger = logging.getLogger(system)
- # This next line is obnoxious. --Dave
- #logger.setLevel(logging.DEBUG)
- edm = eventDict['message'] or ''
- if eventDict['isError'] and eventDict.has_key('failure'):
- if not edm:
- edm = 'Failure:'
- logger.log(self.error_log_level,
- edm, exc_info=eventDict['failure'].exc_info())
- elif eventDict.has_key('format'):
- text = self._safeFormat(eventDict['format'], eventDict)
- logger.log(self.info_log_level, text)
- else:
- text = ' '.join(map(reflect.safe_str, edm))
- logger.log(self.info_log_level, text)
- def start(error_log_level = logging.ERROR,
- info_log_level = logging.INFO ):
- """Writes twisted output to a logger using 'twisted' as the
- logger name (i.e., 'twisted' is passed as name arg to logging.getLogger(name)).
- """
- o = LogLogObserver(error_log_level, info_log_level)
- # We do not use twisted setStdout logging because it is not clear to me
- # how to differentiate twisted-generated log entries and
- # redirected output. It is possible that all stdout and stderr
- # output has system '-', but from looking at twisted source code
- # there does not appear to be any guarantee that this is the case.
- # A simpler way of handling this is to simply separate
- # stdio and stderr redirection from twisted logging. --Dave
- log.startLoggingWithObserver(o.emit , setStdout = 0) #setStdout=int(capture_output))
|