193 lines
No EOL
6.1 KiB
Python
193 lines
No EOL
6.1 KiB
Python
|
|
try:
|
|
import dsz.script
|
|
import dsz.env
|
|
import dsz.ui
|
|
HASDSZ = True
|
|
except:
|
|
HASDSZ = False
|
|
import logging
|
|
import os
|
|
DEBUG = logging.DEBUG
|
|
INFO = logging.INFO
|
|
GOOD = (INFO + 5)
|
|
logging.addLevelName(GOOD, 'GOOD')
|
|
WARNING = logging.WARNING
|
|
ERROR = logging.ERROR
|
|
CRITICAL = logging.CRITICAL
|
|
LOG_FILE_DIR = ''
|
|
if HASDSZ:
|
|
LOG_FILE_DIR = os.path.join(dsz.script.Env['log_path'], 'GetFiles', 'NOSEND', 'OPLOGS')
|
|
DEFAULT_LOG_FILE = 'DSZPyLogger.log'
|
|
_TERM_LOG_FORMAT = '%(asctime)s (%(name)s) - %(message)s'
|
|
_FILE_LOG_FORMAT = '%(asctime)s (%(name)s) %(levelname)s - %(message)s'
|
|
LOG_EXC_TO_TERM = False
|
|
|
|
def getLogger(name=None):
|
|
log = logging.getLogger(name)
|
|
return log
|
|
|
|
def CheckEnvVar(name):
|
|
if HASDSZ:
|
|
dsz.env.Check(name)
|
|
else:
|
|
return None
|
|
|
|
def GetEnvVar(name):
|
|
if HASDSZ:
|
|
dsz.env.Get(name)
|
|
else:
|
|
return None
|
|
|
|
def SetEnvVar(name, value):
|
|
if HASDSZ:
|
|
dsz.env.Set(name, value)
|
|
|
|
class DSZLogger(logging.Logger, ):
|
|
|
|
def __init__(self, name, fileloglevel=DEBUG, termloglevel=GOOD, **kwargs):
|
|
logging.Logger.__init__(self, name, **kwargs)
|
|
if (not os.path.exists(LOG_FILE_DIR)):
|
|
os.makedirs(LOG_FILE_DIR)
|
|
logging.basicConfig(filename=os.path.join(LOG_FILE_DIR, DEFAULT_LOG_FILE), format=_FILE_LOG_FORMAT, level=fileloglevel)
|
|
self.propagate = False
|
|
ch = self._getHandler(logging.FileHandler)
|
|
if (ch is None):
|
|
ch = logging.FileHandler(os.path.join(LOG_FILE_DIR, (name + '.log')))
|
|
formatter = logging.Formatter(_FILE_LOG_FORMAT)
|
|
ch.setFormatter(formatter)
|
|
level = fileloglevel
|
|
try:
|
|
rootFH = root._getHandler(logging.FileHandler)
|
|
if (rootFH is not None):
|
|
level = rootFH.level
|
|
except NameError:
|
|
pass
|
|
ch.setLevel(level)
|
|
self.addHandler(ch)
|
|
ch = self._getHandler(DSZTerminalHandler)
|
|
if (ch is None):
|
|
ch = DSZTerminalHandler()
|
|
formatter = logging.Formatter(_TERM_LOG_FORMAT, '[%H:%M:%S]')
|
|
ch.setFormatter(formatter)
|
|
level = termloglevel
|
|
try:
|
|
rootSH = root._getHandler(DSZTerminalHandler)
|
|
if (rootSH is not None):
|
|
level = rootSH.level
|
|
except NameError:
|
|
pass
|
|
ch.setLevel(level)
|
|
self.addHandler(ch)
|
|
ch = None
|
|
self.setFileLogLevel(fileloglevel)
|
|
self.setTermLogLevel(termloglevel)
|
|
logging.addLevelName(21, 'USER')
|
|
|
|
def logProblem(self, src, details):
|
|
try:
|
|
eLog = logging.getLogger(src)
|
|
eLog.propagate = False
|
|
ch = self._getHandler(logging.FileHandler, eLog)
|
|
if (ch is None):
|
|
ch = logging.FileHandler(os.path.join(LOG_FILE_DIR, 'UserProblems.log'))
|
|
formatter = logging.Formatter(_FILE_LOG_FORMAT)
|
|
ch.setFormatter(formatter)
|
|
ch.setLevel(self.INFO)
|
|
eLog.addHandler(ch)
|
|
except:
|
|
raise TypeError, 'src must be a string [a valid windows filename]'
|
|
eLog.log(21, details)
|
|
eLog = None
|
|
|
|
def setFileLogLevel(self, level):
|
|
try:
|
|
level = int(level)
|
|
except:
|
|
raise TypeError, 'level must be one of DSZPyLogger.DEBUG|INFO|WARNING|ERROR|CRITICAL'
|
|
ch = self._getHandler(logging.FileHandler)
|
|
if (ch is not None):
|
|
ch.setLevel(level)
|
|
ch = None
|
|
|
|
def setTermLogLevel(self, level):
|
|
try:
|
|
level = int(level)
|
|
except:
|
|
raise TypeError, 'level must be one of DSZPyLogger.DEBUG|INFO|GOOD|WARNING|ERROR|CRITICAL'
|
|
ch = self._getHandler(DSZTerminalHandler)
|
|
if (ch is not None):
|
|
ch.setLevel(level)
|
|
ch = None
|
|
|
|
def _getHandler(self, cls):
|
|
for ch in self.handlers:
|
|
if (ch.__class__ == cls):
|
|
return ch
|
|
return None
|
|
|
|
def _getEffectiveHandler(self, cls):
|
|
ch = self._getHandler(cls)
|
|
if ((ch is None) and (self.parent is not None)):
|
|
ch = self._getEffectiveHandler(cls, self.parent)
|
|
return ch
|
|
|
|
def good(self, msg, *args, **kwargs):
|
|
if self.isEnabledFor(GOOD):
|
|
self._log(GOOD, msg, args, **kwargs)
|
|
if HASDSZ:
|
|
|
|
class DSZTerminalHandler(logging.Handler, ):
|
|
|
|
def __init__(self):
|
|
logging.Handler.__init__(self)
|
|
|
|
def emit(self, record):
|
|
try:
|
|
if (not LOG_EXC_TO_TERM):
|
|
record.exc_info = False
|
|
record.exc_text = None
|
|
msg = self.format(record)
|
|
if (record.levelno >= ERROR):
|
|
echocode = dsz.ERROR
|
|
elif (record.levelno >= WARNING):
|
|
echocode = dsz.WARNING
|
|
elif (record.levelno >= GOOD):
|
|
echocode = dsz.GOOD
|
|
else:
|
|
echocode = dsz.DEFAULT
|
|
dsz.ui.Echo(str(msg), echocode)
|
|
except (KeyboardInterrupt, SystemExit):
|
|
raise
|
|
except:
|
|
self.handleError(record)
|
|
else:
|
|
DSZTerminalHandler = logging.StreamHandler
|
|
root = DSZLogger('DSZPyLogger', level=DEBUG)
|
|
logging.Logger.root = root
|
|
logging.setLoggerClass(DSZLogger)
|
|
|
|
class DSZPyLogger:
|
|
DEBUG = logging.DEBUG
|
|
INFO = logging.INFO
|
|
WARNING = logging.WARNING
|
|
ERROR = logging.ERROR
|
|
CRITICAL = logging.CRITICAL
|
|
|
|
def __init__(self):
|
|
pass
|
|
|
|
def getLogger(self, name):
|
|
return getLogger(name)
|
|
|
|
def setTermLogLevel(self, level, log=None):
|
|
if (log is None):
|
|
getLogger().setTermLogLevel(level)
|
|
else:
|
|
log.setTermLogLevel(level)
|
|
|
|
def setFileLogLevel(self, level, log=None):
|
|
if (log is None):
|
|
getLogger().setFileLogLevel(level)
|
|
else:
|
|
log.setFileLogLevel(level) |