All checks were successful
build / build (push) Successful in 2m18s
- basic generation of json files - supported parsers: - healthcheck - result-detail - result-status - file - log - dummy - keyword (keyword, clangtidy, cppcheck, cpplint) - diff - `convert` functions is mature, tested in engr151-24fa last two homeworks and engr151-24fa p3 - teapot and healthcheck should be up to date Co-authored-by: Boming Zhang <bomingzh@sjtu.edu.cn> Reviewed-on: #10 Reviewed-by: Boming Zhang <bomingzh@sjtu.edu.cn> Co-authored-by: jon-lee <jon-lee@sjtu.edu.cn> Co-committed-by: jon-lee <jon-lee@sjtu.edu.cn>
44 lines
1.1 KiB
Python
44 lines
1.1 KiB
Python
import logging
|
|
import sys
|
|
from sys import stderr
|
|
from types import FrameType
|
|
from typing import Optional, Union
|
|
|
|
from loguru import logger as logger
|
|
|
|
|
|
# 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:
|
|
level: Union[str, int]
|
|
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 = "DEBUG",
|
|
) -> None:
|
|
logging.basicConfig(handlers=[InterceptHandler()], level=0, force=True)
|
|
logger.remove()
|
|
logger.add(
|
|
stderr,
|
|
level=stderr_log_level,
|
|
)
|
|
|
|
|
|
set_logger()
|