in src/vw-serving/src/vw_serving/sagemaker/integration.py [0:0]
def setup_logging(log_file_name=None, log_level="info"):
"""
Sets up loggers & log formatters.
Configures file logging to log_file_name or stream logging to sys.stderr
if log_file_name is None.
If the /opt/ml/errors/ path exists, configures the error logger with
file handler pointing to /opt/ml/errors/errors.log.
Otherwise set it to stderr.
Args:
log_file_name: (str) file name to write public log records to, or None to write to stdout
log_level: (str) log level for the public logger
"""
global _setup_loggers
if _setup_loggers:
logging.warning("Loggers have already been setup.")
return
_setup_loggers = True
# setup default logger
log_formatter = logging.Formatter(
'[%(asctime)s %(levelname)s %(thread)d] %(message)s',
datefmt='%m/%d/%Y %H:%M:%S')
default_logger = logging.getLogger()
# Don't fail if the log level is not known
try:
default_logger.setLevel(getattr(logging, log_level.upper()))
except Exception:
default_logger.setLevel(logging.INFO)
default_logger.warning("Failed to set debug level to %s, using INFO", log_level)
if log_file_name:
handler = logging.FileHandler(log_file_name)
else:
handler = logging.StreamHandler(stream=sys.stdout)
handler.setFormatter(log_formatter)
default_logger.addHandler(handler)
# setting up trusted logger
trusted_log_formatter = logging.Formatter(
'[%(asctime)s %(levelname)s %(thread)d %(filename)s:%(lineno)d] %(message)s',
datefmt='%m/%d/%Y %H:%M:%S')
if os.path.isdir(ERROR_VOLUME):
trusted_log_handler = logging.FileHandler(ERROR_FILE_PATH)
else:
trusted_log_handler = logging.StreamHandler(stream=sys.stderr)
trusted_log_handler.setFormatter(trusted_log_formatter)
trusted_log_handler.setLevel(logging.INFO)
error_logger = get_error_logger()
error_logger.addHandler(trusted_log_handler)
error_logger.propagate = False