2011-10-19 9 views
1

如何登錄到文件以及爲了wxpython txt ctrl?python登錄到文件以及wxpython txt ctrl

背景我有基於wxpython GUI的應用程序,它枚舉python測試文件並執行它們。在http://broadcoder.blogspot.com/2009/10/redirecting-python-logging-to.html的幫助下,我能夠將python日誌消息重定向到txtctrl。不過,我也想將日誌消息重定向到日誌文件。 導入我testfiles這樣的:

 logging.info('Started') 
    testid = __import__(str) 
    reload(testid) 

    testOut = testid.main() 

在每一個我testfiles我簡單地使用進口記錄和我的日誌消息重定向到TXT CTRL。不過,我也希望測試日誌消息也可以根據文件的名稱重定向到日誌文件。我如何將我的日誌消息重定向到兩者? 如果我在我的測試文件中使用logging.basicConfig,消息仍然僅指向文本ctrl。我的TestGUI.py中導入了5個python測試文件。在我的測試文件中的文件我只是使用進口記錄,而我安裝了記錄儀在我TestGUI.py文件

self.logr = logging.getLogger('') 
    self.logr.setLevel(logging.INFO) 
    hdlr = WxLog(self.log) 
    hdlr.setFormatter(logging.Formatter('%(message)s ')) 
    self.logr.addHandler(hdlr) 

在我的測試文件,我做這樣的事情:

 logger = logging.getLogger('') 
     fh = logging.FileHandler("log.html",mode='w') 
     formatter = logging.Formatter('%(message)s') 
     fh.setFormatter(formatter) 
     logger.addHandler(fh) 
     a= 5 
     b= 6 

     logging.info('a=5') 
     logging.info('b=6') 
     c= a+b 
     logging.info('adding b and c') 
     fh.close() 

我得到ValueError異常:我/ O在多次運行此測試時關閉的文件上進行操作。

+1

一個記錄器可以有多個處理程序!所以你可以輕鬆實現這一點。 – shahjapan

+0

Duh忘記了這個我知道了 – user974168

+0

@shahjapan:你可以請你回答一個答案,然後OP可以接受它,然後我們其他人就會知道這個問題已經得到解答,我們不會全部閱讀。是的,這是一個簡短的答案,但它是答案。 – tom10

回答

5

一個記錄器可以有多個處理程序!所以你可以輕鬆實現這一點。

例如

import logging 
logger = logging.getLogger('myapp') 
hdlr = logging.FileHandler('var/myapp.log') 
hdlr2 = logging.FileHandler('var/myapp2.log') 
formatter = logging.Formatter('%(asctime)s %(levelname)s %(message)s') 
hdlr.setFormatter(formatter) 
hdlr2.setFormatter(formatter) 
logger.addHandler(hdlr) 
logger.addHandler(hdlr2) 
logger.setLevel(logging.INFO) 
logger.info('a log message')