簡體   English   中英

在Python中將多個python文件記錄到單個日志文件中

[英]Log from multiple python files into single log file in Python

我有多個python文件,我需要從多個python文件登錄到一個公共日志文件。 我不想使用日志配置文件格式化或json字典。 每個python文件都被導入到一個主python文件kickstart.py中,它們都是從kickstart.py調用的。 我想將從master python腳本調用的各種python模塊中的所有消息記錄到單個日志文件中。 請建議使用方法。 我瀏覽了python cookbook,但這沒有用。我對此很新。

謝謝

您可以使用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()

@陳的答案是對的。 我提供的具體用例如下:

假設您有兩個要導入主文件master.py python文件py1.pypy2.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將生成一個包含來自所有模塊( py1.pypy2.py )的日志記錄的單個log.log文件。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM