Return logger.
()
| 118 | |
| 119 | |
| 120 | def get_logger(): |
| 121 | """Return logger.""" |
| 122 | logger = logging.getLogger() |
| 123 | logger_config = get_logger_config(config=read_config(config_path=os.environ.get(ENV_CONFIG_FILE_PATH_KEY, DEFAULT_CONFIG_FILE_PATH))) |
| 124 | if logger_config: |
| 125 | level_name = logging.getLevelName(level=logger_config["level"].upper()) |
| 126 | logger.setLevel(level=level_name) |
| 127 | |
| 128 | # Create handlers once and add them to root logger |
| 129 | file_handler = None |
| 130 | console_handler = None |
| 131 | |
| 132 | if not log_handler_exists( |
| 133 | logger=logger, |
| 134 | handler_type=logging.FileHandler, |
| 135 | filename=logger_config["filename"], |
| 136 | ): |
| 137 | file_handler = logging.FileHandler(logger_config["filename"]) |
| 138 | file_handler.setFormatter( |
| 139 | logging.Formatter( |
| 140 | "%(asctime)s :: %(levelname)s :: %(name)s :: %(filename)s :: %(lineno)d :: %(message)s", |
| 141 | ), |
| 142 | ) |
| 143 | logger.addHandler(file_handler) |
| 144 | |
| 145 | if not log_handler_exists(logger=logger, handler_type=logging.StreamHandler, stream=sys.stdout): |
| 146 | console_handler = logging.StreamHandler(sys.stdout) |
| 147 | console_handler.setFormatter( |
| 148 | ColorfulConsoleFormatter( |
| 149 | "%(asctime)s :: %(levelname)s :: %(name)s :: %(filename)s :: %(lineno)d :: %(message)s", |
| 150 | ), |
| 151 | ) |
| 152 | logger.addHandler(console_handler) |
| 153 | |
| 154 | # Configure icloudpy loggers to use the same level and enable propagation |
| 155 | icloudpy_loggers = [ |
| 156 | logging.getLogger("icloudpy"), |
| 157 | logging.getLogger("icloudpy.base"), |
| 158 | logging.getLogger("icloudpy.services"), |
| 159 | logging.getLogger("icloudpy.services.photos"), |
| 160 | ] |
| 161 | for icloudpy_logger in icloudpy_loggers: |
| 162 | icloudpy_logger.setLevel(level=level_name) |
| 163 | # Enable propagation so messages go to root logger handlers |
| 164 | icloudpy_logger.propagate = True |
| 165 | # Remove any existing handlers to avoid duplicates |
| 166 | icloudpy_logger.handlers.clear() |
| 167 | return logger |
| 168 | |
| 169 | |
| 170 | LOGGER = get_logger() |