forked from JOJ/Joint-Teapot
		
	feat: intercept standard logging messages
This commit is contained in:
		
							parent
							
								
									78f29fc9f6
								
							
						
					
					
						commit
						dd33a8ef9c
					
				|  | @ -1,11 +1,36 @@ | ||||||
|  | import logging | ||||||
|  | import sys | ||||||
| from sys import stderr | from sys import stderr | ||||||
|  | from types import FrameType | ||||||
|  | from typing import Optional | ||||||
| 
 | 
 | ||||||
| from loguru import logger as logger | from loguru import logger as logger | ||||||
| 
 | 
 | ||||||
| from joint_teapot.config import settings | from joint_teapot.config import settings | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
|  | # recipe from https://loguru.readthedocs.io/en/stable/overview.html#entirely-compatible-with-standard-logging | ||||||
|  | class InterceptHandler(logging.Handler): | ||||||
|  |     def emit(self, record: logging.LogRecord) -> None: | ||||||
|  |         try: | ||||||
|  |             level = logger.level(record.levelname).name | ||||||
|  |         except ValueError: | ||||||
|  |             level = record.levelno | ||||||
|  | 
 | ||||||
|  |         # Find caller from where originated the logged message | ||||||
|  |         frame: Optional[FrameType] = sys._getframe(6) | ||||||
|  |         depth = 6 | ||||||
|  |         while frame and frame.f_code.co_filename == logging.__file__: | ||||||
|  |             frame = frame.f_back | ||||||
|  |             depth += 1 | ||||||
|  | 
 | ||||||
|  |         logger.opt(depth=depth, exception=record.exc_info).log( | ||||||
|  |             level, record.getMessage() | ||||||
|  |         ) | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
| def set_logger(stderr_log_level: str = settings.stderr_log_level) -> None: | def set_logger(stderr_log_level: str = settings.stderr_log_level) -> None: | ||||||
|  |     logging.basicConfig(handlers=[InterceptHandler()], level=0, force=True) | ||||||
|     logger.remove() |     logger.remove() | ||||||
|     logger.add(stderr, level=stderr_log_level) |     logger.add(stderr, level=stderr_log_level) | ||||||
|     logger.add(settings.log_file_path, level="DEBUG") |     logger.add(settings.log_file_path, level="DEBUG") | ||||||
|  |  | ||||||
		Loading…
	
		Reference in New Issue
	
	Block a user