App EngineのLogをXMPPで飛ばす (Python版)

GAEのログをXMPPで送るという素晴らしいアイデアを書かれてたので、pythonに移植してみました。
http://d.hatena.ne.jp/hidemon/20091211/1260512565

loggerのXMPP用のhandler

# -*- codign: utf-8 -*-
import logging
from google.appengine.api import xmpp

class XMPPHandler(logging.Handler):
    def __init__(self, level=logging.NOTSET, notifyto=None):
        if not notifyto:
            raise AttributeError('notifyto attribute must be set')
        self.notifyto = notifyto
        logging.Handler.__init__(self, level)

    def emit(self, record):
        if xmpp.get_presence(self.notifyto):
            message = self.format(record)
            status_code = xmpp.send_message(self.notifyto, message)
            is_message_sent = (status_code != xmpp.NO_ERROR)
            if not is_message_sent:
                print "oops"

使う側

あらかじめ、app名@appspot.comの名前をGTalkで招待しておきます。あとは、loggerにhandler設定してlogger.infoなどでログを出力すれば、GTalkにログが送信されます。

def xmpp_logger(clazz, notifyto) :
  handler = XMPPHandler(notifyto=notifyto)
  log = logging.getLogger(clazz)
  log.addHandler(handler)
  log.setLevel(logging.DEBUG)
  return log
logger = xmpp_logger('xxx', 'xx@gmail.com')
logger.warn('aaa');