0

単純なロガーを作成しようとしていますが、例外がスローされます。この例外がスローされる理由についてアドバイスをお願いしますが、いくつかの設計上の提案もありがたいです(これは単純にしておきたいことを覚えておいてください)。

コード:

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 = "%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'
4

1 に答える 1

3

ハンドラー.emit()は文字列ではなくレコードを取得するためです。

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

独自のロガークラスを作成したくない場合は、(または同様の)を使用してロガークラスを取得し、適切なメソッド(たとえば)Logging.getLogger(__name__)を呼び出すだけです。 編集:そして、何かをログに記録するたびに新しいハンドラーを作成する必要はありません。通常、アプリケーションごとに1回作成する必要があります。単純なケースでは、単純にを使用できます。.error(logText)
logging.basicConfig()

http://docs.python.org/library/logging.htmlを参照してください

于 2012-07-07T23:49:35.627 に答える