Python2.7 標準ライブラリ ロガーを使用する単純な Twisted アプリケーションをデーモン化しようとしています。
セットアップは次のとおりです。
Python アプリケーション ファイル (run.py) :
import logging
import logging.config
from twisted.internet import reactor
import conf
def main():
logging.config.dictConfig(conf.LOGGERCONF)
logger = logging.getLogger(conf.LOGGERNAME)
logger.debug('Starting the reactor...')
reactor.callWhenRunning(lambda: logger.info('Reactor started'))
reactor.run()
main()
Twistd アプリケーション ファイル (daemon.tac) :
from twisted.application.service import Application
from twisted.python.log import PythonLoggingObserver
from twisted.python.log import ILogObserver
application = Application('run')
application.setComponent(ILogObserver, PythonLoggingObserver().emit)
ログ オブザーバー ファイル (daemonlog.py) :
from twisted.python import log
def logger():
return log.PythonLoggingObserver().emit
次を使用してアプリケーションを起動します。
python run.py
すべてが正常に機能し、ログ メッセージが正しくファイルされ、表示されます (ロガーの構成に従って)。
でデーモン化しようとしています:
twistd -y daemon.tac --logger=daemonlog.logger
デーモンは正常に起動し、twistd.pid ファイルが (正しい pid 番号で) 作成され、ps -ef コマンドで実行されているデーモンが表示されますが、ログ ファイルは表示されません (twistd.log またはログ ファイルのいずれも表示されません)。 twistd なしで正常に起動されたときにアプリケーションによって作成されます)。
最後に、Python の標準ライブラリ ロガーと一種の "バイパス" twistd ロガーのみを使用したいと思います。
私はおそらく何かを見逃しているか、誤解しているので、助けていただければ幸いです。