2017-08-10 38 views
0

我有一個主python腳本,它可以在我們實驗室的分佈式系統設置中並行配置節點。 我運行kickstart.py的多個實例,它會並行配置所有節點。如何創建日誌處理程序,以便每個kickstart.py實例並行配置每個節點,並且每個實例都記錄到不同的日誌文件中。我想使用python日誌記錄模塊。任何幫助表示讚賞。謝謝運行同一個文件的多個實例,每個實例在Python中登錄到不同的日誌文件中

+0

是否有任何理由,你不能只是添加[文件處理程序(https://開頭的文檔。 python.org/3/library/logging.handlers.html#filehandler)到你的記錄器,並從文件名中的節點名稱派生出一些信息以保持它們的獨特性? –

+0

閱讀關於它的'logging'文檔,你可以將其破解 - https://docs.python.org/2/howto/logging-cookbook.html#logging-from-multiple-threads – droravr

回答

0

您可以從命令行將所需日誌文件的名稱傳遞給python腳本。嘗試這樣的事情。

#!/usr/bin/env python 
import sys 
with open(argv[1], 'a') as logfile: 
    #insert code here 
    if something_bad_happened: 
     logfile.write("Something bad happened!") 

注意,Python有一些更高級的日誌功能,但我不是在這裏使用他們的簡單性。你應該可以使用它們。

將此項作爲python kickstart.py log1運行,以便與腳本記錄到同一目錄中的文件或用完整路徑替換log1。我不知道你的「主腳本」如何調用kickstart.py的多個實例,但這裏的調用從蟒蛇Python代碼的一種方式,通過命令行參數

import subprocess 
>>> subprocess.call(["python kickstart.py", "log1"]) 
0 
+0

Python有一個'logging'庫,不需要重寫它。 – droravr

0

logging模塊是線程安全的,很容易使用。 閱讀相關documentation

下面是一個簡單的例子:

import logging 
import threading 
import time 


def worker(arg): 
    logger = logging.getLogger('simple_example') 
    while not arg['stop']: 
     logger.info('Hello from thread') 
     time.sleep(0.5) 


def main(): 
    logger = logging.getLogger('simple_example') 
    logger.setLevel(logging.DEBUG) 
    fh = logging.FileHandler('spam.log') 
    fh.setLevel(logging.INFO) 
    formatter = logging.Formatter('%(asctime)s - %(threadName)s - %(levelname)s - %(message)s') 
    fh.setFormatter(formatter) 
    logger.addHandler(fh) 

    thread = threading.Thread(target=worker, args=(info,)) 
    thread.start() 

    for x in range(3): 
     logger.info('Hello from main') 
     time.sleep(0.75) 

    thread.join() 

if __name__ == '__main__': 
    main() 

,這將給你:

2017-08-11 11:00:53,568 - simple_example - INFO - Hello from main 
2017-08-11 11:00:53,568 - simple_example - INFO - Hello from thread 
2017-08-11 11:00:54,069 - simple_example - INFO - Hello from thread 
2017-08-11 11:00:54,318 - simple_example - INFO - Hello from main 
2017-08-11 11:00:55,068 - simple_example - INFO - Hello from main 
相關問題