2013-08-27 76 views
1

我有一個日誌記錄器設置,但我無法弄清楚如何僅在命令失敗或生成stderr時才記錄日誌。只使用python logger將日誌文件記錄到日誌文件中

def RunAndLog(self, command, logf) 
    p = subprocess.Popen(command, shell=False, 
      stdout=subprocess.PIPE, stderr=subprocess.PIPE) 
    (stdout, stderr) = p.communicate() 
    logger = logging.getLogger('check rel') 
    logger.setLevel(logging.ERROR) 
    filehand = logging.handlers.RotatingFileHandler(logFile, mode='a',maxBytes=0, 
       backupCount=0, encoding=None, delay=0) 
    filehand.setLevel(logging.ERROR) 
    lformat = logging.Formatter('%(message)s') 
    filehand.setFormatter(lformat) 
    logger.addHandler(filehand) 
    logger.info(stdout) 
    logger.error(stderr) 
    logger.removeHandler(filehand) 

我打電話給這個列表目錄。喜歡的東西,

self.RunAndLog(["dir","%s",pathtodir], "test.log") 

test.log包含了兩種情況,即消息,當目錄不存在,也當它......這裏有一個例子:

#case where dir doesn't exist 
dir: /path/to/dir/dir1: No such file or directory 

# case where it does 
bin lib include src test python doc 

我如何才能登錄消息到test.log僅適用於目錄不存在或僅在dir命令失敗且非零退出狀態的情況下?

謝謝...

+0

它在那裏。從頂部 – iamauser

+0

排行#3好抓住,但這是一個錯字,當我粘貼...現在編輯... – iamauser

+0

我懷疑,因爲沒有調用它會導致例外。 –

回答

1

filehandler處理程序捕獲所有的日誌信息。您將其級別設置爲ERROR,這會使其從ERROR和上級(包括INFO)捕獲所有消息,這就是爲什麼您記錄的每條消息都會進入該文件。

如果你想要更多的控制,你還必須添加Filter對象。

相關問題