(self, place, level=logging.DEBUG)
| 94 | |
| 95 | class PrintLogger: |
| 96 | def __init__(self, place, level=logging.DEBUG) -> None: |
| 97 | assert place.endswith(".log"), "@place should be a file path" |
| 98 | |
| 99 | self.place = place |
| 100 | |
| 101 | self.logger = logging.getLogger() |
| 102 | self.logger.setLevel(level) |
| 103 | |
| 104 | _dir = os.path.dirname(place) |
| 105 | assert os.path.exists(_dir), f"dir {_dir} not exists" |
| 106 | |
| 107 | file_handler = logging.FileHandler(place) |
| 108 | file_handler.setLevel(level) |
| 109 | |
| 110 | stream_handler = logging.StreamHandler(sys.stdout) |
| 111 | stream_handler.setLevel(logging.INFO) |
| 112 | |
| 113 | formatter = logging.Formatter( |
| 114 | r"%(asctime)s - %(levelname)s - %(message)s", |
| 115 | datefmt=r"%Y-%m-%d %H:%M:%S", |
| 116 | ) |
| 117 | file_handler.setFormatter(formatter) |
| 118 | stream_handler.setFormatter(formatter) |
| 119 | |
| 120 | self.logger.addHandler(file_handler) |
| 121 | self.logger.addHandler(stream_handler) |
| 122 | |
| 123 | self.init_print() |
| 124 | |
| 125 | def init_print(self): |
| 126 | self.log('log will print out in {}'.format(self.place)) |
nothing calls this directly
no test coverage detected