pythonのロギングモジュールをapache/modpythonで動作させるための標準的な方法は何ですか?mod_python/apacheにログインする
私はmylog.warn( 'whatever')を呼び出して、その結果をreq.log_error()に呼び出したいと思っています。ここで、reqはmodpythonの要求です。
これを設定する簡単な方法はありますか?
pythonのロギングモジュールをapache/modpythonで動作させるための標準的な方法は何ですか?mod_python/apacheにログインする
私はmylog.warn( 'whatever')を呼び出して、その結果をreq.log_error()に呼び出したいと思っています。ここで、reqはmodpythonの要求です。
これを設定する簡単な方法はありますか?
私はそれをやったことはありませんが、logging.Handler
のサブクラスを書くことはそれほど難しくありません。このような何かがトリックを行う必要があります。現時点ではmod_pythonはインストールされていないので実際に試してみたとは言いませんが、logging.root.addHandler(ApacheLogHandler())
を呼び出して解決する必要があります。 YMMV。
import logging
import apache
class ApacheLogHandler(logging.Handler):
LEVEL_MAP = {
logging.DEBUG: apache.APLOG_DEBUG,
logging.INFO: apache.APLOG_INFO,
logging.WARNING: apache.APLOG_WARNING,
logging.ERROR: apache.APLOG_ERR,
logging.CRITICAL: apache.APLOG_CRIT,
}
def __init__(self, request=None):
self.log_error = apache.log_error
if request is not None:
self.log_error = request.log_error
def emit(self,record):
apacheLevel = apache.APLOG_DEBUG
if record.levelno in ApacheLogHandler.LEVEL_MAP:
apacheLevel = ApacheLogHandler.LEVEL_MAP[record.levelno]
self.log_error(record.getMessage(), apacheLevel)
以下を使用します。それは完全にhereと書かれています。
logging.fileConfigにはlogging.iniファイルを使用します。
各モジュールは、logger= logging.getLogger(__name__)
を使用していますそして、私たちはアプリケーション全体でlogger.error( "何とか何とか何とか")を行うことができます。
これは完全に機能します。 logging.iniファイルは、Webアプリケーション用の他のログファイルと一緒に保管できるように、ログファイルの場所を定義します。