2016-05-24 20 views
4

(我已經搜索過,沒有找到這個問題的副本,但高興地被證明,否則)。日誌自動旋轉 - 蟒蛇和窗口

我需要從一些Python代碼中旋轉日誌。代碼在Windows(Server 2008 R2)上運行。

最初我使用TimedRotatingFileHandler(來自Python的logging.handlers包),但由於我的理解是多處理問題,因此我們無法正常工作(subprocess.check_call用於啓動另一個應用程序)。

我已經檢出了ConcurrentLogHandler,它看起來可能會做這個工作,但我有點擔心它自2013年以來沒有更新過(儘管問題最近已經提出)。

UPDATEopen bug(自2013年起)表示ConcurrentLogHandler不適用於Python 2.7/Windows。在日誌記錄上,代碼只是掛起。

是否有最佳做法Windows解決方案我應該使用?

+0

看起來您所指的錯誤是針對第三方軟件包,而不是Python中包含的錯誤 –

+1

我發現一位正在使用日誌記錄服務器來解決此問題的人員:https://www.huyng .com/posts/python-logging-from-multiple-processes –

+1

這可能也很有用 - http://plumberjack.blogspot.com/2010/09/using-logging-with-multiprocessing.html –

回答

0

也許我失去了一些東西,但是Python的日誌記錄模塊配備了RotatingFileHandler

import logging 
import time 

from logging.handlers import RotatingFileHandler 

#---------------------------------------------------------------------- 
def create_rotating_log(path): 
    """ 
    Creates a rotating log 
    """ 
    logger = logging.getLogger("Rotating Log") 
    logger.setLevel(logging.INFO) 

    # add a rotating handler 
    handler = RotatingFileHandler(path, maxBytes=20, 
            backupCount=5) 
    logger.addHandler(handler) 

    for i in range(10): 
     logger.info("This is test log line %s" % i) 
     time.sleep(1.5) 

#---------------------------------------------------------------------- 
if __name__ == "__main__": 
    log_file = r"c:\path\to\test.log" 
    create_rotating_log(log_file) 

這在Windows 7上運行良好,我與Python 2.7以下是進入更詳細一些鏈接:

+0

是的 - 這個(和TimedRotatingFileHandler,這是我用來作爲原始要求的日誌是每天滾動)完全正常工作,直到你把多個進程混合。 在2008年(https://bugs.python.org/issue4749),一個類似的問題被記錄爲一個錯誤(隨後被關閉爲一個錯誤)。在我的情況下,我的額外過程不是試圖寫入日誌,但我們看到相同的行爲。 我會更新我的問題來澄清這一點! – azp74

0

好的 - 這就是我最終做的。

因爲就日誌記錄而言,事情只有多線程(額外的過程不寫入我的日誌)我已經結束了手搖這個。這種方法並不讓我感到興奮 - 創建一個線程鎖對象,關閉日誌記錄(logging.shutdown - 不要激動,因爲doco說在程序退出時調用它),移動文件&啓動再次登錄。然後釋放鎖。

這是所有在嘗試/除了塊,以便如果出現錯誤鎖釋放。

測試表明這是做什麼需要的。

在這種情況下調用logging.shutdown有沒有我不知道的一些影響?!