Source code for docplex.util.logging_utils

# --------------------------------------------------------------------------
# Source file provided under Apache License, Version 2.0, January 2004,
# http://www.apache.org/licenses/
# (c) Copyright IBM Corp. 2018
# --------------------------------------------------------------------------
'''This package provide simple logging facilities.
'''
import logging


[docs]class DocplexLogger(object): '''Simple logger interface. '''
[docs] def log(self, level, msg): '''Logs a message with the specified level. ''' raise NotImplementedError('subclasses must override log()!')
[docs] def debug(self, msg): '''Logs a message with level DEBUG. ''' self.log(logging.DEBUG, msg)
[docs] def info(self, msg): '''Logs a message with level INFO. ''' self.log(logging.INFO, msg)
[docs] def warning(self, msg): '''Logs a message with level WARNING. ''' self.log(logging.WARNING, msg)
[docs] def error(self, msg): '''Logs a message with level ERROR. ''' self.log(logging.ERROR, msg)
[docs] def critical(self, msg): '''Logs a message with level CRITICAL. ''' self.log(logging.CRITICAL, msg)
[docs]class LoggerToDocloud(DocplexLogger): '''This logger maps logs with python style logging levels to a docplexcloud logger expecting java style logging levels. ''' def __init__(self, docloudlogger): super(LoggerToDocloud, self).__init__() self.docloudlogger = docloudlogger
[docs] def log(self, level, msg): # fix for https://github.ibm.com/IBMDecisionOptimization/docplex/issues/312 # => force msg to be a `str` before it goes on code that can potentially JSONify it msg = msg if isinstance(msg, str) else str(msg) if level == logging.DEBUG: self.docloudlogger.fine(msg) elif level == logging.INFO: self.docloudlogger.info(msg) elif level == logging.WARNING: self.docloudlogger.warning(msg) elif level == logging.ERROR or level == logging.CRITICAL: self.docloudlogger.error(msg) else: raise ValueError('Supported logging levels are: DEBUG, INFO, WARNING, ERROR, CRITICAL. Provided = %s' % level)
[docs]class LoggerToFile(DocplexLogger): '''This logger logs log records with python style logging levels and just print them on the specified stream ''' def __init__(self, file): super(LoggerToDocloud, self).__init__() self.file = file
[docs] def log(self, level, msg): self.file.write('[%s] %s\n' % (level, msg))