2012-07-07 41 views
0

我想寫一個簡單的記錄器,但我得到一個異常拋出。我希望得到一些關於爲什麼拋出這個異常的建議,但也會欣賞一些設計建議(請記住,我想保持這種簡單)。簡單的旋轉Python記錄器(RotatingFileHandler)

代碼:

import logging 
import logging.handlers 

class Logger: 

    @staticmethod 
    def log_to_file(logText): 

     logFile = logging.handlers.RotatingFileHandler('/var/log/sosms/sosmsd.log', 'a', 1000, 5) 
     formatter = logging.Formatter() 
     logFile.setFormatter(formatter) 

     logFile.emit(logText) 

     return 

輸出:

[email protected]:/var/log/sosms$ /etc/rc.local 
Traceback (most recent call last): 
    File "/usr/lib/python2.7/logging/handlers.py", line 77, in emit 
    if self.shouldRollover(record): 
    File "/usr/lib/python2.7/logging/handlers.py", line 156, in shouldRollover 
    msg = "%s\n" % self.format(record) 
    File "/usr/lib/python2.7/logging/__init__.py", line 719, in format 
    return fmt.format(record) 
    File "/usr/lib/python2.7/logging/__init__.py", line 464, in format 
    record.message = record.getMessage() 
AttributeError: 'str' object has no attribute 'getMessage' 
Traceback (most recent call last): 
    File "/git/sosms/sosmsd/Main.py", line 10, in <module> 
    Logger.Logger.log_to_file('SOSMSD starting..') 
    File "/git/sosms/sosmsd/Logger.py", line 14, in log_to_file 
    logFile.emit(logText) 
    File "/usr/lib/python2.7/logging/handlers.py", line 83, in emit 
    self.handleError(record) 
    File "/usr/lib/python2.7/logging/__init__.py", line 799, in handleError 
    record.filename, record.lineno)) 
AttributeError: 'str' object has no attribute 'filename' 
+0

一個建議:你的封裝日誌實現一類是不必要的。 – 2012-07-08 00:52:24

回答

3

由於處理程序的.emit()需要記錄,而不是一個字符串。

http://docs.python.org/library/logging.handlers.html

你可能不希望創建自己的記錄器類,只需檢索一個使用Logging.getLogger(__name__)(或類似),並調用適當的方法(.error(logText)爲例)。
編輯:你絕對不想在每次登錄時創建一個新的處理程序,通常應該爲每個應用程序創建一次。對於簡單的情況,你可以簡單地使用logging.basicConfig()

http://docs.python.org/library/logging.html