Python记录器-具有多个级别的多个记录器实例-最佳实践
我有以下要求:Python记录器-具有多个级别的多个记录器实例-最佳实践,python,logging,handler,Python,Logging,Handler,我有以下要求: 拥有一个可配置的全局记录器(设置级别、其他处理程序等) 要具有可配置的每个模块记录器(设置级别、附加处理程序等) 换句话说,我们需要更多配置不同的日志 因此,我做了以下几点 logger_module_1 = setup_logger(module_name='module1', level=logging.INFO) logger_module_2 = setup_logger(module_name='module2', level=logging.DEBUG) logge
logger_module_1 = setup_logger(module_name='module1', level=logging.INFO)
logger_module_2 = setup_logger(module_name='module2', level=logging.DEBUG)
logger_module_1.debug("This is logger_module_1 log and will NOT be visible because it is setup to INFO log")
logger_module_2.debug("This is logger_module_2 log and will be visible because it is setup to DEBUG log")
logger_global = setup_logger(level=logging.DEBUG)
logger_module_1 = setup_logger(module_name='module1', level=logging.INFO)
logger_module_2 = setup_logger(module_name='module2', level=logging.DEBUG)
logger_global.debug("This is global log and will be visible because it is setup to DEBUG log")
logger_module_1.debug("This is logger_module_1 log and will NOT be visible because it is setup to INFO log")
logger_module_2.debug("This is logger_module_2 log and will be visible because it is setup to DEBUG log")
在我尝试哪些有效,哪些无效,并对其进行更深入的测试之前,我想问您,这是否是一种很好的做法,或者您对如何达到我们的要求有任何其他建议
谢谢你的帮助我终于找到了方法:
def setup_logger(module_name=None, level=logging.INFO, add_stdout_logger=True):
custom_logger = logging.getLogger('global')
if module_name:
custom_logger = logging.getLogger(module_name)
print("Clear all handlers in logger") # prevent multiple handler creation
module_logger.handlers.clear()
if add_stdout_logger:
print("Add stdout logger")
stdout_handler = logging.StreamHandler(sys.stdout)
stdout_handler.setLevel(level)
stdout_handler.setFormatter(logging.Formatter(fmt='%(asctime)-11s [%(levelname)s] [%(name)s] %(message)s'))
module_logger.addHandler(stdout_handler)
# here you can add another handlers ,...
# because we use custom handlers which have the different type of log level,
# then our logger has to have the lowest level of logging
custom_logger.setLevel(logging.DEBUG)
return custom_logger
然后只需调用以下命令
logger_module_1 = setup_logger(module_name='module1', level=logging.INFO)
logger_module_2 = setup_logger(module_name='module2', level=logging.DEBUG)
logger_module_1.debug("This is logger_module_1 log and will NOT be visible because it is setup to INFO log")
logger_module_2.debug("This is logger_module_2 log and will be visible because it is setup to DEBUG log")
这会在每次调用根时向其添加另一个处理程序。不要那样做,一次就够了。也不要一直设置根记录器级别。