我有多个python文件,我需要将多个python文件记录到一个公共日志文件中。我不想使用日志配置文件格式化或json字典。每个python文件都被导入到一个主python文件kickstart.py中,它们都是从kickstart.py调用的。我想将从master python脚本调用的各种python模块中的所有消息记录到单个日志文件中。 请建议使用方法。我浏览了python cookbook,但这没有用。我对此很新。
由于
答案 0 :(得分:4)
您可以使用logging
模块执行此操作。在您的一个基本模块中定义此功能,并在您想要记录某些内容的每个模块中调用它。
import logging
def get_logger(name):
log_format = '%(asctime)s %(name)8s %(levelname)5s %(message)s'
logging.basicConfig(level=logging.DEBUG,
format=log_format,
filename='dev.log',
filemode='w')
console = logging.StreamHandler()
console.setLevel(logging.DEBUG)
console.setFormatter(logging.Formatter(log_format))
logging.getLogger(name).addHandler(console)
return logging.getLogger(name)
然后从您想要记录的每个模块中,使用您想要的记录器名称调用此函数,并且所有模块将打印到filename
参数定义的同一日志文件。
<base.py>
logger = get_logger('base')
logger.info('testing logger from module base')
<module2.py>
logger = get_logger('module2')
logger.info('testing logger from module module2')
<dev.log>
2017-08-11 00:34:00,361 base INFO testing logger from module base
2017-08-11 00:34:00,361 module2 INFO testing logger from module module2
答案 1 :(得分:1)
@Chen的回答是正确的。我提供了一个特定的用例,如下所示:
假设您有两个要导入到主文件py1.py
中的python文件py2.py
,master.py
。
#py1
import logging
def fun1():
LOGGER = logging.getLogger(__name__)
LOGGER.info('fun1 runs')
#py2
import logging
def fun2():
LOGGER = logging.getLogger(__name__)
LOGGER.info('fun2 runs')
#master.py
import py1
import py2
import logging
def main():
logging.basicConfig(filename='log.log',level=logging.INFO)
LOGGER = logging.getLogger("main")
py1.fun1()
py2.fun2()
LOGGER.info('Master runs')
if __name__ == "__main__":
main()
然后执行master.py
将生成一个单独的log.log
文件,其中包含来自所有模块(py1.py
和py2.py
)的日志记录。