[telepathy-python/master] Log messages written on stderr (debug interface)

Louis-Francis Ratté-Boulianne louis-francis.ratte-boulianne at collabora.co.uk
Mon Aug 17 13:43:25 PDT 2009


---
 src/server/debug.py |   30 ++++++++++++++++++++++++++++++
 1 files changed, 30 insertions(+), 0 deletions(-)

diff --git a/src/server/debug.py b/src/server/debug.py
index 78f738d..a12e28d 100644
--- a/src/server/debug.py
+++ b/src/server/debug.py
@@ -28,6 +28,8 @@ from telepathy.server.properties import DBusProperties
 
 import dbus.service
 import logging
+import sys
+import time
 
 LEVELS = {
         logging.ERROR:   DEBUG_LEVEL_ERROR,
@@ -54,6 +56,7 @@ class Debug(_Debug, DBusProperties, logging.Handler):
 
         self._implement_property_get(DEBUG, {'Enabled': lambda: self.enabled})
         logging.getLogger(root).addHandler(self)
+        sys.stderr = StdErrWrapper(self, sys.stderr)
 
     def GetMessages(self):
         return self._messages
@@ -81,3 +84,30 @@ class Debug(_Debug, DBusProperties, logging.Handler):
             domain, category = record.name.split('.', 1)
             name = domain + "/" + category
         return name
+
+# Wrapper around stderr so the exceptions are logged
+
+class StdErrWrapper(object):
+
+    def __init__(self, interface, stderr):
+        self._buffer = ""
+        self._interface = interface
+        self._stderr = stderr
+
+    def __getattr__(self, attr):
+        return getattr(self._stderr, attr)
+
+    def write(self, string):
+        self._stderr.write(string)
+        if '\n' not in string:
+            self._buffer += string
+            return
+
+        lines = string.split('\n')
+        lines[0] = self._buffer + lines[0]
+        self._buffer = lines[-1]
+        del lines[-1]
+
+        timestamp = time.time()
+        for line in lines:
+            self._interface.add_message(timestamp, "stderr", DEBUG_LEVEL_ERROR, line)
-- 
1.5.6.5




More information about the telepathy-commits mailing list