按模块单独记录



我有一个python模块,它可以创建一个记录器;我在main中调用它,并在main中记录所有消息。如何在不同的模块中访问此记录器?

我的代码:

my_logger.py
import logging
import logging.handlers
def setup_logging(file_name):
logger = logging.getLogger(file_name)
logger.setLevel(logging.DEBUG)
runlog_formatter = logging.Formatter('%(asctime)s %(name)s line-%(lineno)dtt%(levelname)st%(message)s')        
runlog_handler = logging.handlers.TimedRotatingFileHandler(file_name, when='midnight', backupCount=30)
runlog_handler.setLevel(logging.DEBUG)
runlog_handler.setFormatter(runlog_formatter)
logger.addHandler(runlog_handler)
return logger
TestCode.py:
import my_logger
import someother_module
if __name__ == '__main__':
logger = base_logger.setup_logging('testStatus.log')
logger.info('--- SCRIPT RUNNING ---n')
param1 = 'parameter1'
param2 = 'parameter2'
logger.info(someother_module.get_status(param1, param2))
logger.info('--- SCRIPT EXITING ---n')

的其他模块

def get_status(param1, param2):
print('Parameter1: %s' % param1) # here, I would like to use the logger created in main
print('Parameter2: %s' % param2)

我可以将记录器从main传递到其他模块的get_status吗?

您经常会发现官方文档建议使用:

# at module top-level
logger = logging.getLogger(__name__)

因为您会得到记录程序,它们可以准确地从哪里进行通信(foo_module.__name__生成完整的模块路径(。

通过相同的机制,即使您给它起了一些不同的名称,例如在logging.getLogger('testStatus.log')的情况下,您也可以通过传递相同的名称来获取相同的记录器,即使是在不同的模块中。

最新更新