# Copyright (c) 2023-2024, Zexin He # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. # You may obtain a copy of the License at # # https://www.apache.org/licenses/LICENSE-2.0 # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # See the License for the specific language governing permissions and # limitations under the License. # -*- coding: utf-8 -*- # @Organization : Tongyi Lab, Alibaba # @Author : Lingteng Qiu # @Email : 220019047@link.cuhk.edu.cn # @Time : 2025-08-31 10:02:15 # @Function : Tqdm-compatible logging handler import os import logging from tqdm.auto import tqdm class TqdmStreamHandler(logging.StreamHandler): def emit(self, record): tqdm.write(self.format(record)) def configure_logger(stream_level, log_level, file_path=None): _stream_level = stream_level.upper() _log_level = log_level.upper() _project_level = _log_level _formatter = logging.Formatter( "[%(asctime)s] %(name)s: [%(levelname)s] %(message)s" ) _stream_handler = TqdmStreamHandler() _stream_handler.setLevel(_stream_level) _stream_handler.setFormatter(_formatter) if file_path is not None: os.makedirs(os.path.dirname(file_path), exist_ok=True) _file_handler = logging.FileHandler(file_path) _file_handler.setLevel(_log_level) _file_handler.setFormatter(_formatter) _project_logger = logging.getLogger(__name__.split(".")[0]) _project_logger.setLevel(_project_level) _project_logger.addHandler(_stream_handler) if file_path is not None: _project_logger.addHandler(_file_handler)