import logging
import logging.handlers
import os
import stat
import sys
base_dir = os.path.dirname(os.path.dirname(os.path.dirname(os.path.dirname(os.path.abspath(__file__)))))
sys.path.insert(0, base_dir)
from ascend_deployer.module_utils.path_manager import get_validated_env
CUR_DIR = os.path.dirname(os.path.realpath(__file__))
class LogTool:
@classmethod
def get_log_dir(cls):
if 'site-packages' not in CUR_DIR and 'dist-packages' not in CUR_DIR:
log_dir = os.path.dirname(CUR_DIR)
else:
if get_validated_env('ASCEND_DEPLOYER_HOME'):
deployer_home = get_validated_env('ASCEND_DEPLOYER_HOME')
else:
deployer_home = os.getcwd()
log_dir = os.path.join(deployer_home, "ascend-deployer")
return log_dir
@classmethod
def get_log_format(cls):
format_string = \
"%(asctime)s downloader [%(levelname)s] " \
"[%(filename)s:%(lineno)d %(funcName)s] %(message)s"
date_format = '%Y-%m-%d %H:%M:%S'
return logging.Formatter(format_string, date_format)
@classmethod
def chmod_log_file(cls, file_path):
if not os.path.exists(file_path):
os.close(os.open(file_path, os.O_CREAT, stat.S_IRUSR | stat.S_IWUSR))
else:
os.chmod(file_path, stat.S_IRUSR | stat.S_IWUSR)
@classmethod
def get_rotating_conf(cls):
return dict(mode='a',
maxBytes=20 * 1024 * 1024,
backupCount=5,
encoding="UTF-8"
)
@classmethod
def get_log_level(cls):
return os.environ.get("ASCEND_DEPLOYER_LOG_LEVEL", logging.INFO)
@classmethod
def get_rotating_file_handler(cls, file_name: str):
log_dir = LogTool.get_log_dir()
if not os.path.exists(log_dir):
os.makedirs(log_dir, mode=0o750)
file_path = os.path.join(log_dir, file_name)
handler = logging.handlers.RotatingFileHandler(filename=file_path, **LogTool.get_rotating_conf())
handler.setFormatter(cls.get_log_format())
return handler
@classmethod
def get_console_handler(cls):
console_handler = logging.StreamHandler(sys.stdout)
console_handler.setFormatter(cls.get_log_format())
return console_handler
@classmethod
def generate_logger(cls, logger_name, handlers):
logger = logging.getLogger(logger_name)
logger.setLevel(cls.get_log_level())
for handler in handlers:
logger.addHandler(handler)
return logger