Raven

来自百合仙子's Wiki
跳转到导航 跳转到搜索

配置示例

logging

import logging

def setup_sentry_logging(dsn, level=logging.WARN):
  from raven.handlers.logging import SentryHandler
  from raven.conf import setup_logging

  handler = SentryHandler(dsn)
  handler.setLevel(level)
  setup_logging(handler)

asyncio

使用 raven-aiohttp 库:

def setup_sentry_logging(dsn, level=logging.WARN):
  from raven import Client
  from raven.handlers.logging import SentryHandler
  from raven.conf import setup_logging

  from raven_aiohttp import AioHttpTransport

  client = Client(dsn, transport=AioHttpTransport)
  handler = SentryHandler(client)
  handler.setLevel(level)
  setup_logging(handler)

  return lambda: client.remote.get_transport().close()

def main():
  sentry_cleanup = setup_sentry_logging(SENTRY_DSN)
  ...
  try:
    loop.run_until_complete(task)
    ...
  finally:
    loop.run_until_complete(sentry_cleanup())
    loop.close()
from raven.contrib.tornado import AsyncSentryClient
from raven.conf import setup_logging
from raven.handlers.logging import SentryHandler

application.sentry_client = AsyncSentryClient(sentry_url)
handler = SentryHandler(application.sentry_client, level=logging.ERROR)
# don't catch tornado logger; it's handled by SentryMixin
logging.getLogger('my_app').addHandler(handler)


from raven.contrib.tornado import SentryMixin

class BaseHandler(SentryMixin, RequestHandler):
  def log_exception(self, typ, value, tb):
    # don't log too much (like 40x)
    ret = super(SentryMixin, self).log_exception(typ, value, tb)
    if isinstance(value, HTTPError):
      if value.status_code < 500:
        return ret
    self.captureException(exc_info=(typ, value, tb))
    return ret

  ...

仅 logging:

def setup_sentry_for_tornado(dsn, level=logging.WARN):
  from raven.contrib.tornado import AsyncSentryClient
  from raven.conf import setup_logging
  from raven.handlers.logging import SentryHandler

  sentry_client = AsyncSentryClient(dsn)
  handler = SentryHandler(sentry_client, level=level)
  setup_logging(handler)

注意

raven 会尝试导入 gevent(即使并不使用),这可能导致问题(如 Saltgevent 1.1.1 不兼容;1.0.1 和 1.1.2 都没问题)。

使用

指定主机名

logger.error('msg', extra = {'server_name': hostname})

参见

外部链接