mirror of
				https://github.com/PaddlePaddle/PaddleOCR.git
				synced 2025-10-31 09:49:30 +00:00 
			
		
		
		
	
		
			
	
	
		
			66 lines
		
	
	
		
			2.5 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
		
		
			
		
	
	
			66 lines
		
	
	
		
			2.5 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
|   | # Copyright (c) 2020 PaddlePaddle Authors. All Rights Reserve. | ||
|  | # | ||
|  | # 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 | ||
|  | # | ||
|  | #    http://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. | ||
|  | import os | ||
|  | import sys | ||
|  | import logging | ||
|  | import functools | ||
|  | import paddle.distributed as dist | ||
|  | 
 | ||
|  | logger_initialized = {} | ||
|  | 
 | ||
|  | 
 | ||
|  | @functools.lru_cache() | ||
|  | def get_logger(name='srnet', log_file=None, log_level=logging.INFO): | ||
|  |     """Initialize and get a logger by name.
 | ||
|  |     If the logger has not been initialized, this method will initialize the | ||
|  |     logger by adding one or two handlers, otherwise the initialized logger will | ||
|  |     be directly returned. During initialization, a StreamHandler will always be | ||
|  |     added. If `log_file` is specified a FileHandler will also be added. | ||
|  |     Args: | ||
|  |         name (str): Logger name. | ||
|  |         log_file (str | None): The log filename. If specified, a FileHandler | ||
|  |             will be added to the logger. | ||
|  |         log_level (int): The logger level. Note that only the process of | ||
|  |             rank 0 is affected, and other processes will set the level to | ||
|  |             "Error" thus be silent most of the time. | ||
|  |     Returns: | ||
|  |         logging.Logger: The expected logger. | ||
|  |     """
 | ||
|  |     logger = logging.getLogger(name) | ||
|  |     if name in logger_initialized: | ||
|  |         return logger | ||
|  |     for logger_name in logger_initialized: | ||
|  |         if name.startswith(logger_name): | ||
|  |             return logger | ||
|  | 
 | ||
|  |     formatter = logging.Formatter( | ||
|  |         '[%(asctime)s] %(name)s %(levelname)s: %(message)s', | ||
|  |         datefmt="%Y/%m/%d %H:%M:%S") | ||
|  | 
 | ||
|  |     stream_handler = logging.StreamHandler(stream=sys.stdout) | ||
|  |     stream_handler.setFormatter(formatter) | ||
|  |     logger.addHandler(stream_handler) | ||
|  |     if log_file is not None and dist.get_rank() == 0: | ||
|  |         log_file_folder = os.path.split(log_file)[0] | ||
|  |         os.makedirs(log_file_folder, exist_ok=True) | ||
|  |         file_handler = logging.FileHandler(log_file, 'a') | ||
|  |         file_handler.setFormatter(formatter) | ||
|  |         logger.addHandler(file_handler) | ||
|  |     if dist.get_rank() == 0: | ||
|  |         logger.setLevel(log_level) | ||
|  |     else: | ||
|  |         logger.setLevel(logging.ERROR) | ||
|  |     logger_initialized[name] = True | ||
|  |     return logger |