2012-02-28 102 views
1

我寫了一個處理夜間轉換和音頻數據存檔的小型Python腳本。由於沿途出現了一些意想不到的問題(不存在的文件,與數據庫服務器的不可靠連接等),我添加了Python自己的日誌記錄工具來跟蹤遇到的任何問題。什麼是配置Python的logging.FileHandler的正確方法?

問題是,無論腳本從哪裏運行(例如當前工作目錄),都會創建日誌文件,所以我有兩個日誌文件,一個在我的homedir中(當腳本由cron運行時使用)和一個在腳本自己的目錄中(當我調試它時使用)。我更願意將日誌文件和配置文件保存在與腳本相同的目錄中。

我在這裏裝載記錄儀的配置:

logging.config.fileConfig(os.path.join(sys.path[0], 'logger.conf')) 

...這是我的logger.conf相關部分:

[handler_fileHandler] 
class=FileHandler 
level=DEBUG 
formatter=fileFormatter 
args=('echi_export.log', 'a',) 

絕對路徑的工作,我是一個有點不願意使用它們。

簡而言之,使用Python的logger模塊(特別是FileHandler)配置文件日誌記錄的正確方法是什麼?一些真實世界的例子就足夠了。

+0

看起來像你想出來的。 FWIW,我經常發現使用StreamHandler進行stdout更簡單。對於調試,我通常只想在stdout中看到輸出,並且在cron上可以將其輸入到任何需要的文件中(使用絕對路徑來避免混淆)。只是一個偏好問題。 – danny 2012-02-28 15:57:19

+0

在cron中管理標準輸出/標準錯誤看起來確實不那麼複雜。 – Halka 2012-02-29 09:05:26

+0

找到答案後,最好將它作爲答案*並加以接受:這樣,問題就不會像未答覆一樣懸而未決。 – 2012-02-29 12:40:23

回答

1

所以,顯然我可以在配置文件中使用Python表達式:

[handler_fileHandler] 
    <snip> 
args=(os.path.join(sys.path[0],'echi_export.log'), 'a',) 

這導致腳本駐留在同一目錄下創建的日誌文件

os.path.dirname(__file__)解析/usr/lib/python2.7/logging/在我的系統上,這可能是記錄模塊所在的地方)。