|
@@ -50,7 +50,7 @@ def getLevelNumByDescription(description):
|
|
num = getattr(LevelsByDescription, description, None)
|
|
num = getattr(LevelsByDescription, description, None)
|
|
return num
|
|
return num
|
|
|
|
|
|
-class Handler(object):
|
|
|
|
|
|
+class Handler:
|
|
fmt = '%(message)s'
|
|
fmt = '%(message)s'
|
|
level = LevelsByName.INFO
|
|
level = LevelsByName.INFO
|
|
def setFormat(self, fmt):
|
|
def setFormat(self, fmt):
|
|
@@ -93,6 +93,7 @@ class Handler(object):
|
|
class FileHandler(Handler):
|
|
class FileHandler(Handler):
|
|
"""File handler which supports reopening of logs.
|
|
"""File handler which supports reopening of logs.
|
|
"""
|
|
"""
|
|
|
|
+
|
|
def __init__(self, filename, mode="a"):
|
|
def __init__(self, filename, mode="a"):
|
|
self.stream = open(filename, mode)
|
|
self.stream = open(filename, mode)
|
|
self.baseFilename = filename
|
|
self.baseFilename = filename
|
|
@@ -144,9 +145,6 @@ class BoundIO:
|
|
self.buf = ''
|
|
self.buf = ''
|
|
|
|
|
|
class RotatingFileHandler(FileHandler):
|
|
class RotatingFileHandler(FileHandler):
|
|
-
|
|
|
|
- open_streams = {}
|
|
|
|
-
|
|
|
|
def __init__(self, filename, mode='a', maxBytes=512*1024*1024,
|
|
def __init__(self, filename, mode='a', maxBytes=512*1024*1024,
|
|
backupCount=10):
|
|
backupCount=10):
|
|
"""
|
|
"""
|
|
@@ -171,38 +169,12 @@ class RotatingFileHandler(FileHandler):
|
|
"""
|
|
"""
|
|
if maxBytes > 0:
|
|
if maxBytes > 0:
|
|
mode = 'a' # doesn't make sense otherwise!
|
|
mode = 'a' # doesn't make sense otherwise!
|
|
- self.mode = mode
|
|
|
|
- self.baseFilename = filename
|
|
|
|
- self.stream = self.stream or open(filename, mode)
|
|
|
|
-
|
|
|
|
|
|
+ FileHandler.__init__(self, filename, mode)
|
|
self.maxBytes = maxBytes
|
|
self.maxBytes = maxBytes
|
|
self.backupCount = backupCount
|
|
self.backupCount = backupCount
|
|
self.counter = 0
|
|
self.counter = 0
|
|
self.every = 10
|
|
self.every = 10
|
|
|
|
|
|
- class _stream(object):
|
|
|
|
- """
|
|
|
|
- Descriptor for managing open filehandles so that only one
|
|
|
|
- filehandle per file path ever receives logging.
|
|
|
|
- """
|
|
|
|
- def __get__(self, obj, objtype):
|
|
|
|
- """
|
|
|
|
- Return open filehandle or None
|
|
|
|
- """
|
|
|
|
- return objtype.open_streams.get(obj.baseFilename)
|
|
|
|
-
|
|
|
|
- def __set__(self, obj, stream):
|
|
|
|
- """
|
|
|
|
- Set open filehandle for filename defined on the
|
|
|
|
- RotatingFileHandler
|
|
|
|
- """
|
|
|
|
- obj.open_streams[obj.baseFilename] = stream
|
|
|
|
-
|
|
|
|
- stream = _stream()
|
|
|
|
-
|
|
|
|
- def close(self):
|
|
|
|
- if self.stream: self.stream.close()
|
|
|
|
-
|
|
|
|
def emit(self, record):
|
|
def emit(self, record):
|
|
"""
|
|
"""
|
|
Emit a record.
|
|
Emit a record.
|