簡體   English   中英

Python 記錄多個模塊,每個模塊記錄到單獨的文件

[英]Python logging multiple modules each module log to separate files

我有一個主腳本和多個模塊。 現在我有日志記錄設置,其中所有模塊的所有日志記錄都進入同一個日志文件。 當所有內容都在一個文件中時,很難調試。 所以我想將每個模塊分成自己的日志文件。 我還想看到每個模塊使用的請求模塊到使用它的模塊的日志中。 我不知道這是否可能。 我到處搜索並嘗試了我能想到的所有方法,但它總是返回將所有內容記錄到一個文件中或在每個模塊中設置日志記錄,並從我的主模塊啟動腳本而不是作為模塊導入。

主文件

import logging, logging.handlers
import other_script.py

console_debug = True
log = logging.getLogger()

def setup_logging():    
    filelog = logging.handlers.TimedRotatingFileHandler(path+'logs/api/api.log',
                when='midnight', interval=1, backupCount=3)
    filelog.setLevel(logging.DEBUG)
    fileformatter = logging.Formatter('%(asctime)s %(name)-15s %(levelname)-8s %(message)s')
    filelog.setFormatter(fileformatter)
    log.addHandler(filelog)

    if console_debug:
        console = logging.StreamHandler()
        console.setLevel(logging.DEBUG)
        formatter = logging.Formatter('%(name)-15s: %(levelname)-8s %(message)s')
        console.setFormatter(formatter)
        log.addHandler(console)

if __name__ == '__main__':
    setup_logging()

其他腳本.py

import requests
import logging

log = logging.getLogger(__name__)

python日志記錄的一個非常基本的概念是,日志記錄的每個文件、流或其他地方都相當於一個處理程序。 因此,如果您希望每個模塊都記錄到不同的文件,則必須為每個模塊提供自己的處理程序。 這也可以從一個中心位置完成。 在您的 main.py 中,您可以添加它以使 other_script 模塊記錄到一個單獨的文件中:

other_logger = logging.getLogger('other_script')
other_logger.addHandler(logging.FileHandler('other_file'))
other_logger.propagate = False

僅當您向根記錄器添加處理程序時才需要最后一行。 如果您將傳播保持在默認 True,您也會將所有日志發送到根記錄器處理程序。 在您的場景中,甚至根本不使用根記錄器可能會更好,而在 main 中使用像getLogger('__main__')這樣的特定命名記錄器。

暫無
暫無

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

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