2013-02-03 67 views
2

我有一個腳本,記錄數據位磁盤:Python的守護程序:保持記錄

logging.basicConfig(filename='davis-debug.log',level=logging.DEBUG) logging.basicConfig(filename='davis-error.log',level=logging.ERROR) logging.basicConfig(filename='davis-error.log',level=logging.WARNING) logging.basicConfig(filename='davis-error.log',level=logging.CRITICAL)

當我使用Python守護這樣,記錄停止。

try: 
    with daemon.DaemonContext(): 
    station = VantageProStation() 
    station.run() 

except KeyboardInterrupt: 
    logging.critical('Stopping user aborted with CTRL+C') 
pass 

我試過file_preserve,但logging.basicConfig不返回流。
另外我不能通過使用files_preserve幾個流..?
我想要我的日誌記錄繼續,我試圖把日誌定義在我的類init,這也沒有幫助。

+0

從守護一個以外是一個KeyboardInterrupt ... strage? –

+0

是的,即時通訊仍處於開發階段,僅用於測試:) – HyperDevil

回答

4

在守護進程中配置記錄器怎麼樣?這個工作對我來說:

#!/usr/bin/env python 

import daemon 
import logging 
import logging.handlers 
from time import sleep 
from datetime import datetime 

def time_logging_daemon(): 
    logger = logging.getLogger('time_logging_daemon') 
    logger.addHandler(logging.handlers.SysLogHandler(address='/dev/log')) 
    logger.setLevel(logging.INFO) 
    while True: 
     logger.info(datetime.now()) 
     sleep(1) 

with daemon.DaemonContext(): 
    time_logging_daemon() 
0

守護程序上下文關閉所有文件句柄是「很乖守護」除了在files_preserve指定的人。你是在正確的方向。

有一種方法可以從logging獲取文件處理程序,但我建議您明確創建文件記錄器。

#!/usr/bin/env python 

import daemon 
import logging 
import logging.handlers 
from time import sleep 
from datetime import datetime 

logging.basicConfig() 

file_logger = logging.FileHandler("/tmp/aaa.log", "w") 

logger = logging.getLogger() 
logger.addHandler(file_logger) 
logger.setLevel(logging.INFO) 

with daemon.DaemonContext(files_preserve=[file_logger.stream.fileno()]): 
    while True: 
     logger.info(datetime.now()) 
     sleep(1) 
+0

從技術上講,以上是可行的,但我建議您在守護程序上下文中創建記錄器。 –