def test_emitEventWithBrokenRepr(self): """ DefaultObserver.emit() does not raise when it observes an error event with a message that causes L{repr} to raise. """ class Ouch(object): def __repr__(self): return str(1 / 0) message = ("foo", Ouch()) event = dict(message=message, isError=1) observer = log.DefaultObserver() with StringIO() as output: observer.stderr = output observer.emit(event) self.assertTrue(output.getvalue().startswith("foo <Ouch instance"))
def test_failureLogger(self): """ The reason argument passed to log.err() appears in the report generated by DefaultObserver. """ from StringIO import StringIO obs = log.DefaultObserver() obs.stderr = StringIO() obs.start() reason = "The reason." log.err(Exception(), reason) errors = self.flushLoggedErrors() self.assertSubstring(reason, obs.stderr.getvalue()) self.assertEqual(len(errors), 1) obs.stop()
def test_failureLogger(self): """ The reason argument passed to log.err() appears in the report generated by DefaultObserver. """ self.catcher = [] self.observer = self.catcher.append log.addObserver(self.observer) self.addCleanup(log.removeObserver, self.observer) obs = log.DefaultObserver() obs.stderr = StringIO() obs.start() self.addCleanup(obs.stop) reason = "The reason." log.err(Exception(), reason) errors = self.flushLoggedErrors() self.assertIn(reason, obs.stderr.getvalue()) self.assertEqual(len(errors), 1)
def set_up_logging(where): class ignr(logging.Filter): def filter(self, r): return r.levelname != "INFO" format = "%(asctime)s %(levelname)s: %(message)s" if where else "%(message)s" filename = os.path.expanduser(where) if where else None logging.basicConfig(level=logging.DEBUG, format=format, datefmt="%b %d %H:%M:%S", filename=filename, stream=sys.stdout) twistlog = logging.getLogger('twisted') twistlog.addFilter(ignr()) try: observer = log.PythonLoggingObserver() except AttributeError: observer = log.DefaultObserver() observer.start()