1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89
|
#
# Module supporting logging
#
# processing/logger.py
#
# Copyright (c) 2006-2008, R Oudkerk --- see COPYING.txt
#
import sys
__all__ = ['enableLogging', 'getLogger', 'subDebug',
'debug', 'info', 'subWarning']
NOTSET = 0
SUBDEBUG = 5
DEBUG = 10
INFO = 20
SUBWARNING = 25
DEFAULT_FORMAT = '[%(levelname)s/%(processName)s] %(message)s'
_logger = None
def subDebug(msg, *args):
if _logger:
_logger.log(SUBDEBUG, msg, *args)
def debug(msg, *args):
if _logger:
_logger.log(DEBUG, msg, *args)
def info(msg, *args):
if _logger:
_logger.log(INFO, msg, *args)
def subWarning(msg, *args):
if _logger:
_logger.log(SUBWARNING, msg, *args)
def getLogger():
'''
Returns logger used by processing
'''
return _logger
def enableLogging(level, HandlerType=None, handlerArgs=(), format=None):
'''
Enable logging using `level` as the debug level
'''
global _logger
import logging, atexit
from processing import process
logging._acquireLock()
try:
if _logger is None:
temp = logging.getLogger('processing')
temp._extra_args = (HandlerType, handlerArgs, format)
_logger = temp
_logger.propagate = 0
def makeRecord(self, *args):
record = self.__class__.makeRecord(self, *args)
record.processName = process.currentProcess()._name
return record
MethodType = type(_logger.log)
_logger.makeRecord = MethodType(makeRecord, _logger)
logging.addLevelName(SUBDEBUG, 'SUBDEBUG')
logging.addLevelName(SUBWARNING, 'SUBWARNING')
# cleanup func of `processing` should run before that of `logging`
atexit._exithandlers.remove((process._exitFunction, (), {}))
atexit._exithandlers.append((process._exitFunction, (), {}))
HandlerType = HandlerType or logging.StreamHandler
if HandlerType:
format = format or DEFAULT_FORMAT
handler = HandlerType(*handlerArgs)
handler.setFormatter(logging.Formatter(format))
_logger.handlers = [handler] # overwrites any old handler
_logger.setLevel(level)
_logger._extra_args = (HandlerType, handlerArgs, format)
else:
_logger.setLevel(level)
finally:
logging._releaseLock()
|