Ensure exception tracebacks are logged in the server log

This commit is contained in:
Kovid Goyal 2015-06-02 19:12:56 +05:30
parent b7e4dcc400
commit bf0909669d
3 changed files with 13 additions and 15 deletions

View File

@ -7,12 +7,10 @@ __license__ = 'GPL v3'
__copyright__ = '2011, Kovid Goyal <kovid@kovidgoyal.net>'
__docformat__ = 'restructuredtext en'
import unittest, shutil, time, httplib, traceback
from functools import partial
import unittest, time, httplib
from threading import Thread
from calibre.utils.logging import ThreadSafeLog
rmtree = partial(shutil.rmtree, ignore_errors=True)
from calibre.srv.utils import ServerLog
class BaseTest(unittest.TestCase):
@ -21,13 +19,6 @@ class BaseTest(unittest.TestCase):
ae = unittest.TestCase.assertEqual
class TestLog(ThreadSafeLog):
def exception(self, *args, **kwargs):
limit = kwargs.pop('limit', None)
self.prints(self.ERROR, *args, **kwargs)
self.prints(self.WARN, traceback.format_exc(limit))
class TestServer(Thread):
daemon = True
@ -43,7 +34,7 @@ class TestServer(Thread):
self.loop = ServerLoop(
create_http_handler(handler),
opts=Options(**kwargs),
log=TestLog(level=ThreadSafeLog.WARN),
log=ServerLog(level=ServerLog.WARN),
)
self.log = self.loop.log

View File

@ -178,6 +178,11 @@ def eintr_retry_call(func, *args, **kwargs):
continue
raise
# Logging {{{
class ServerLog(ThreadSafeLog):
exception_traceback_level = ThreadSafeLog.WARN
class RotatingStream(object):
def __init__(self, filename, max_size=None, history=5):
@ -215,11 +220,12 @@ class RotatingStream(object):
atomic_rename(self.filename, '%s.%d' % (self.filename, 1))
self.set_output()
class RotatingLog(ThreadSafeLog):
class RotatingLog(ServerLog):
def __init__(self, filename, max_size=None, history=5):
ThreadSafeLog.__init__(self)
ServerLog.__init__(self)
self.outputs = [RotatingStream(filename, max_size, history)]
# }}}
class HandleInterrupt(object): # {{{

View File

@ -166,6 +166,7 @@ class DevNull(Log):
self.outputs = []
class ThreadSafeLog(Log):
exception_traceback_level = Log.DEBUG
def __init__(self, level=Log.INFO):
Log.__init__(self, level=level)
@ -179,7 +180,7 @@ class ThreadSafeLog(Log):
limit = kwargs.pop('limit', None)
with self._lock:
Log.prints(self, ERROR, *args, **kwargs)
Log.prints(self, DEBUG, traceback.format_exc(limit))
Log.prints(self, self.exception_traceback_level, traceback.format_exc(limit))
class ThreadSafeWrapper(Log):