简单旋转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

输出:

kyle@boxmunch:/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 = "%sn" % 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'

因为处理程序的.emit()采用记录,而不是字符串。

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

您可能不想创建自己的logger类,只需使用Logging.getLogger(__name__)(或类似的)检索一个logger类并调用适当的方法(例如.error(logText)
编辑:您绝对不想每次记录某个内容时都创建一个新的处理程序,通常每个应用程序都应该创建一次。对于简单的情况,您可以简单地使用logging.basicConfig()

请参阅http://docs.python.org/library/logging.html

相关内容

  • 没有找到相关文章

最新更新