在Python中将多个python文件记录到单个日志文件中

时间:2017-08-15 21:00:48

标签: python python-2.7 logging

我有多个python文件,我需要将多个python文件记录到一个公共日志文件中。我不想使用日志配置文件格式化或json字典。每个python文件都被导入到一个主python文件kickstart.py中,它们都是从kickstart.py调用的。我想将从master python脚本调用的各种python模块中的所有消息记录到单个日志文件中。 请建议使用方法。我浏览了python cookbook,但这没有用。我对此很新。

由于

2 个答案:

答案 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

logging.basicConfig()

答案 1 :(得分:1)

@Chen的回答是正确的。我提供了一个特定的用例,如下所示:

假设您有两个要导入到主文件py1.py中的python文件py2.pymaster.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.pypy2.py)的日志记录。