def filter(self, record: logging.LogRecord): s = str(record.pathname).replace('\\', '/').replace(RootPath().root_path, '').replace('/', '.')[1:] l: List[str] = s.split('.') l.pop(l.__len__() - 1) # 丢弃最后的文件扩展名'py' file_name = l.pop(l.__len__() - 1) self._replace_underline(l) # 有些py文件以'_'开头, 需要删去, 才能取首字母 i: int = 0 while self._s_len(l) + file_name.__len__() + record.funcName.__len__( ) > 50: # 如果超出了长度再进行缩减操作 if i >= l.__len__(): # 实在太长了缩减不了, 就算了, 需要保证最后的文件名与函数名的完整 break l[i] = l[i][0] i += 1 l.append(file_name) l.append(record.funcName) record.customPathname = '.'.join('%s' % item for item in l) """ 不能在这边直接就修改 >>> record.pathname = '.'.join('%s' % item for item in l) 有可能后面的log依赖这个pathname, 那么这个pathname就被修改了, 而没有被系统重新赋予正确的pathname 例如test.log包中的多层级__init__, 就会出现这种问题 """ return True