From 4e88e927fbed34ab86cfc95cd963c9a9939944ed Mon Sep 17 00:00:00 2001 From: Marco Pesenti Gritti Date: Mon, 16 Oct 2006 13:56:22 +0000 Subject: Remove the old dbus stuff, use one log file per process --- (limited to 'sugar/logger.py') diff --git a/sugar/logger.py b/sugar/logger.py index bc65736..ffbea43 100644 --- a/sugar/logger.py +++ b/sugar/logger.py @@ -15,137 +15,58 @@ # Free Software Foundation, Inc., 59 Temple Place - Suite 330, # Boston, MA 02111-1307, USA. -import sys, os +import sys +import os import logging import traceback from cStringIO import StringIO -import dbus +from sugar import env -#internals of D-Bus Python are changing -#try not to use it in the future -if dbus.version < (0, 70, 0): - import dbus.dbus_bindings +_log_writer = None -import gobject +class LogWriter: + def __init__(self, module_id): + self._module_id = module_id -from sugar import env + logs_dir = os.path.join(env.get_profile_path(), 'logs') + if not os.path.isdir(logs_dir): + os.makedirs(logs_dir) + + log_path = os.path.join(logs_dir, module_id + '.log') + self._log_file = open(log_path, 'w') -__queue = None - -CONSOLE_BUS_NAME = 'org.laptop.Sugar.Console' -CONSOLE_OBJECT_PATH = '/org/laptop/Sugar/Console' -CONSOLE_IFACE = 'org.laptop.Sugar.Console' - -class MessageQueue: - def __init__(self, console, console_id): - self._idle_id = 0 - self._console = console - self._console_id = console_id - self._levels = [] - self._messages = [] - self._bus = dbus.SessionBus() - - if self._console == None: - con = self._bus._connection - name_has_owner = False - - try: - name_has_owner = dbus.dbus_bindings.bus_name_has_owner(con, CONSOLE_BUS_NAME) - except: - name_has_owner = con.name_has_owner(CONSOLE_BUS_NAME) - - if name_has_owner: - self.setup_console() - else: - self._bus.add_signal_receiver( - self.__name_owner_changed, - dbus_interface = "org.freedesktop.DBus", - signal_name = "NameOwnerChanged") - - def setup_console(self): - proxy_obj = self._bus.get_object(CONSOLE_BUS_NAME, - CONSOLE_OBJECT_PATH) - self._console = dbus.Interface(proxy_obj, CONSOLE_IFACE) - self._queue_log() - - def __name_owner_changed(self, service_name, old_name, new_name): - if service_name == CONSOLE_BUS_NAME: - if new_name != None: - self.setup_console() - else: - self._console = None - - def _queue_log(self): - if self._idle_id == 0: - self._idle_id = gobject.idle_add(self._log) - - def _log(self): - # Use stderr for now until dbus issues get sorted out - use_dbus = False - - if use_dbus: - if self._console == None or len(self._messages) == 0: - self._idle_id = 0 - return False - - if isinstance(self._console, dbus.Interface): - self._console.log(self._console_id, self._levels, - self._messages, timeout = 1000) - else: - self._console.log(self._console_id, self._levels, - self._messages) - else: - for x in range(0, len(self._messages)): - level = self._levels[x] - msg = self._messages[x] - prog = os.path.basename(sys.argv[0]) - fmt = "%s (%s): Level %s - %s\n" % (prog, os.getpid(), level, msg) - fmt = fmt.encode("utf8") - sys.stderr.write(fmt) - - self._levels = [] - self._messages = [] - self._idle_id = 0 - - return False - - def append_record(self, record): - self.append(record.levelno, record.msg) - - def append(self, level, message): - self._levels.append(level) - self._messages.append(message) - self._queue_log() + def write_record(self, record): + self.write(record.levelno, record.msg) + + def write(self, level, msg): + fmt = "(%s): Level %s - %s\n" % (os.getpid(), level, msg) + fmt = fmt.encode("utf8") + self._log_file.write(fmt) class Handler(logging.Handler): - def __init__(self, queue): + def __init__(self, writer): logging.Handler.__init__(self) - self._queue = queue + self._writer = writer def emit(self, record): - self._queue.append_record(record) + self._writer.write_record(record) def __exception_handler(typ, exc, tb): trace = StringIO() traceback.print_exception(typ, exc, tb, None, trace) print >> sys.stderr, trace.getvalue() - __queue.append(logging.ERROR, trace.getvalue()) + _log_writer.write(logging.ERROR, trace.getvalue()) -def start(console_id, console = None): - queue = MessageQueue(console, console_id) +def start(module_id): + log_writer = LogWriter(module_id) root_logger = logging.getLogger('') root_logger.setLevel(logging.DEBUG) - root_logger.addHandler(Handler(queue)) - - log_file = os.path.join(env.get_profile_path(), 'sugar.log') - fileh = logging.FileHandler(log_file) - fileh.setFormatter(logging.Formatter("""[%(asctime)s] %(message)s""")) - root_logger.addHandler(fileh) + root_logger.addHandler(Handler(log_writer)) - global __queue - __queue = queue + global _log_writer + _log_writer = log_writer sys.excepthook = __exception_handler -- cgit v0.9.1