ÿØÿàJFIFÿþ ÿÛC       ÿÛC ÿÀÿÄÿÄ"#QrÿÄÿÄ&1!A"2qQaáÿÚ ?Øy,æ/3JæÝ¹È߲؋5êXw²±ÉyˆR”¾I0ó2—PI¾IÌÚiMö¯–þrìN&"KgX:Šíµ•nTJnLK„…@!‰-ý ùúmë;ºgµŒ&ó±hw’¯Õ@”Ü— 9ñ-ë.²1<yà‚¹ïQÐU„ہ?.’¦èûbß±©Ö«Âw*VŒ) `$‰bØÔŸ’ëXÖ-ËTÜíGÚ3ð«g Ÿ§¯—Jx„–’U/ÂÅv_s(Hÿ@TñJÑãõçn­‚!ÈgfbÓc­:él[ðQe 9ÀPLbÃãCµm[5¿ç'ªjglå‡Ûí_§Úõl-;"PkÞÞÁQâ¼_Ñ^¢SŸx?"¸¦ùY騐ÒOÈ q’`~~ÚtËU¹CڒêV  I1Áß_ÿÙ# Module for logging in subprocess. Process related info (call stack) is logged # to simplify investigation of lveclt hangings # # Copyright © Cloud Linux GmbH & Cloud Linux Software, Inc 2010-2024 All Rights Reserved # # Licensed under CLOUD LINUX LICENSE AGREEMENT # http://cloudlinux.com/docs/LICENSE.TXT # Base module for logging in subprocess # # Copyright © Cloud Linux GmbH & Cloud Linux Software, Inc 2010-2024 All Rights Reserved # # Licensed under CLOUD LINUX LICENSE AGREEMENT # http://cloudlinux.com/docs/LICENSE.TXT import logging from cllvectl.base_subprocess_log import get_log_level, init_subprocess_logger as base_init_subprocess_logger DEFAULT_LOG_FORMAT = '%(asctime)s - %(name)s - %(levelname)s - %(message)s' LVECTL_SUBPROCESS_LOG_FILENAME = '/var/log/cloudlinux/lvectl-subprocess.log' LVECTL_LOG_FILENAME = '/var/log/cloudlinux/lvectl.log' def get_subprocess_logger(name: str, file_name: str = LVECTL_SUBPROCESS_LOG_FILENAME) -> logging.Logger: """Get ordinary synchronous logger instance :param str name: logger name :param str file_name: log file, defaults to LVECTL_LOG_FILENAME :return logging.Logger: logger instance """ return base_init_subprocess_logger(name, file_name) def get_synchronous_logger(name: str, file_name: str = LVECTL_LOG_FILENAME): logger = logging.getLogger(name) fh = logging.FileHandler(file_name) fh.setFormatter(logging.Formatter(DEFAULT_LOG_FORMAT)) log_level = get_log_level(file_name) fh.setLevel(log_level) logger.addHandler(fh) logger.setLevel(log_level) return logger