2010-12-16 124 views
1

我有一個使用Python日誌記錄模塊進行日誌記錄的Jython腳本。在一臺機器上,腳本記錄良好,另一臺記錄的時間則轉移到未來五個小時。據推測,這與格林威治標準時間-5時的機器有關。你認爲會導致這個問題?Jython日誌記錄時間錯誤

下面是如何創建的日誌對象:

log = logging.getLogger("my_log") 
log.setLevel(logging.DEBUG) 
handler = logging.handlers.RotatingFileHandler(
     log_file, 
     maxBytes=log_size, 
     backupCount=logs_count) 
log_format = logging.Formatter("%(asctime)s:%(levelname)s:%(message)s") 
handler.setFormatter(log_format) 
handler.setLevel(logging.DEBUG) 
log.addHandler(handler) 

我沒看log_format.converter功能。我確實確定了在有問題的機器上正確設置時間。而且我確信Python會在Python shell中打印正確的時間。

編輯:如果我看time.localtime()從Python的外殼(2.4.3),然後我得到正確的本地時間值的元組。如果我從Jython腳本(2.5.2RC1)中查看time.localtime(),那麼我可以看到GMT時間。

+0

記錄正確的機器是否使用GMT? – Velociraptors 2010-12-16 17:24:56

+0

是的,它的確如此:它是一臺Linux機器,Unix機器在內部使用GMT,然後進行數學計算。另一臺機器......我不確定。我的意思是我知道它是CentOS第5版(Final),從/ etc/issues來看,但我認爲它是虛擬化的。在兩臺機器上,當我從bash運行'date'時,我得到正確的時間。 – wilhelmtell 2010-12-16 17:32:00

+0

我也嘗試明確設置'log_format.converter = time.localtime'無濟於事。 – wilhelmtell 2010-12-16 17:59:07

回答

1

我想我找到了問題。顯然,Java本身讓時間錯了,原因是在有問題的機器上,Java的時區設置不正確。 /etc/profile.d/java.sh中的export TZ='US/East'似乎解決了這個問題。

這花了我一些時間,因爲運行date從shell輸出正確的本地時間和時區信息。 Python也能夠正確地計算出時區。

謝謝你們!

0

我會檢查你在哪裏獲得你的時間戳,以確保它在UTC,我會檢查你交出時間戳的地方,以確保它實際上被庫解釋爲UTC。

+0

我沒有交出時間。所有的操作都完全隱藏在日誌庫中。我只是指定每條日誌消息的格式,然後開始記錄日誌。 – wilhelmtell 2010-12-16 17:22:17

0

什麼是log_format.converter設置爲?根據documentation,它默認爲time.localtime。如果您將其更改爲time.gmtime,則所有時間都將使用GMT。

+0

我沒有改變它。我發佈的代碼是設置記錄器的所有內容,除了從別處獲取'log_file','log_size'和'logs_count'外。 – wilhelmtell 2010-12-16 17:27:52

+0

是否將其更改爲'time.gmtime'是一種可接受的解決方法? – Velociraptors 2010-12-16 17:50:22