2017-08-31 93 views
0

我想了解日誌文件如何與Python 2 logging module一起使用。在Python 2中指定自定義日誌記錄Linux文件路徑

我知道我可以使用像保存日誌輸出到一個文本文件中:

logging.basicConfig(filename='example.log',level=logging.DEBUG) 

這不是很清楚,我從文檔上:

  1. 無論絕對filename路徑有效
  2. 用於指定相對路徑的合適語法路徑(假設../example.log 已驗證)。

如果我執行從/home/bob這個劇本,我怎麼指定,我想保存到/tmp目錄,而不是日誌文件 - 使用絕對和相對路徑?

logging.basicConfig(filename='../../tmp/example.log')有效嗎?

同樣,是logging.basicConfig(filename='/tmp/example.log')有效嗎?

回答

2

當僅指出文件名時,它將被寫入當前目錄。 使用Python IDLE可以檢查如下

>>> import logging 
>>> logging.basicConfig(filename='relative.log') 
>>> logging.info('test') 

C:\Python27\relative.log 

我的工作目錄是Python27,我有一個文件名爲存在與relative.log我登錄的消息。

當您將文件位置更改爲../relative.log時,我在Python27的父目錄中得到一個新文件。所以相對路徑做了記錄工作:

>>> import logging 
>>> logging.basicConfig(filename='../relative.log') 
>>> logging.info('test123') 

C:\relative.log 

而且logging模塊還支持絕對路徑

>>> logging.basicConfig(filename=r'c:\abs_path.log') 
>>> logging.info('test') 

C:\abs_path.log 

它始終是最好使用絕對路徑,如明顯優於隱式

+0

謝謝 - 這無疑是一個愚蠢的問題。我已經驗證絕對路徑也適用於Linux環境。 – alex

+0

它會,只是注意,如果你在Windows平臺上運行它,你需要在寫入路徑之前爲原始數據添加'r',否則它會拋出一個錯誤,除非你轉義路徑中的每一個斜槓 – Vinny

1

它們都是有效的。但相對路徑(使用..)將根據您運行時所處的目錄選擇不同的文件。

所以當你運行logger.py/home/user/projects/python和文件名是../log.txt該文件將被保存在/home/user/projects。另一方面,當您在/home/user中運行腳本時,log.txt將保存在/home/中。

絕對路徑始終工作,更可靠。如果你想在當前目錄中的文件,我推薦這種方法:

basedir = os.path.abspath(os.path.dirname(__file__)) 
filename = os.path.join(basedir, 'file.txt') 
相關問題