我有一個主python腳本,它可以在我們實驗室的分佈式系統設置中並行配置節點。 我運行kickstart.py的多個實例,它會並行配置所有節點。如何創建日誌處理程序,以便每個kickstart.py實例並行配置每個節點,並且每個實例都記錄到不同的日誌文件中。我想使用python日誌記錄模塊。任何幫助表示讚賞。謝謝運行同一個文件的多個實例,每個實例在Python中登錄到不同的日誌文件中
0
A
回答
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
相關問題
- 1. Python:登錄到多個日誌文件
- 2. 獲取一個類的多個實例使用Python日誌與瓶登錄到一個文件
- 3. 從同一個文件中打開HTA的多個實例
- 4. 同時運行可執行文件的多個實例
- 5. 類別的每個實例的唯一日誌文件
- 6. Akka是否同時運行同一事件的多個實例?
- 7. 每個實例使用python導入多個行的txt文件
- 8. 在不同文件上記錄同一進程的多個實例
- 9. 如果我有多個相同的python應用程序運行如何執行登錄到文件的實例?
- 10. 在同一個終端實例中對多個日誌的輸出進行diplaying
- 11. 執行來自不同實例的另一個Python實例
- 12. 避免同一個JS文件的多個實例
- 13. 我應該存儲同一個文件的多個實例嗎?
- 14. 要求同一個文件在多個實例上
- 15. 將文件從一個EC2實例同步到另一個EC2實例
- 16. python運行多個實例
- 17. NLog爲類的每個實例創建新的日誌文件
- 18. 在同一個jvm中一次運行多個spark實例的最佳實踐?
- 19. 保存在同一個實例的多個記錄在Hibernate中
- 20. 同一個域中Cakephp的不同實例的多個會話
- 21. 在多個源文件中訪問相同的類實例
- 22. 如何讓同一個應用程序日誌的不同實例與log4net到不同的文件?
- 23. 在Windows中同時運行批處理文件的多個實例?
- 24. 在同一行以及在同一文件在java中的不同行中的多個日誌記錄
- 25. 如何將多個實例映射到Weblogic中的同一個war文件?
- 26. 在螞蟻中運行同一目標的多個實例
- 27. guice中同一類的多個實例
- 28. 如何在不同的AppDomain中運行多個服務實例?
- 29. 批處理文件打開cmd的多個實例並在每個實例中運行Ruby腳本
- 30. 每個實例運行多個WorkerRoles
是否有任何理由,你不能只是添加[文件處理程序(https://開頭的文檔。 python.org/3/library/logging.handlers.html#filehandler)到你的記錄器,並從文件名中的節點名稱派生出一些信息以保持它們的獨特性? –
閱讀關於它的'logging'文檔,你可以將其破解 - https://docs.python.org/2/howto/logging-cookbook.html#logging-from-multiple-threads – droravr