3

少しのデータをディスクに記録するスクリプトがあります。

logging.basicConfig(filename='davis-debug.log',level=logging.DEBUG) logging.basicConfig(filename='davis-error.log',level=logging.ERROR) logging.basicConfig(filename='davis-error.log',level=logging.WARNING) logging.basicConfig(filename='davis-error.log',level=logging.CRITICAL)

このように python-daemon を使用すると、ロギングが停止します。

try:
  with daemon.DaemonContext():
  station = VantageProStation()
  station.run()

except KeyboardInterrupt:
  logging.critical('Stopping user aborted with CTRL+C')
pass

file_preserve を試しましたが、logging.basicConfig はストリームを返しません。
また、files_preserve を使用して複数のストリームを渡すことはできません..? もちろん、ロギングを継続したいので、ログ定義をクラスの初期
化に入れようとしましたが、どちらも役に立ちませんでした。

4

2 に答える 2

6

デーモン内でロガーを構成するのはどうですか?これは私のために働きます:

#!/usr/bin/env python

import daemon
import logging
import logging.handlers
from time import sleep
from datetime import datetime

def time_logging_daemon():
    logger = logging.getLogger('time_logging_daemon')
    logger.addHandler(logging.handlers.SysLogHandler(address='/dev/log'))
    logger.setLevel(logging.INFO)
    while True:
        logger.info(datetime.now())
        sleep(1)

with daemon.DaemonContext():
    time_logging_daemon()
于 2013-02-03T17:07:49.173 に答える
1

デーモン コンテキストは、ファイル ハンドラで指定されたものを除いて、すべてのファイル ハンドラを「適切に動作するデーモン」として閉じますfiles_preserve。あなたは正しい方向にいました。

ファイル ハンドラを取得する方法はありますがlogging、ファイル ロガーを明示的に作成することをお勧めします。

#!/usr/bin/env python

import daemon
import logging
import logging.handlers
from time import sleep
from datetime import datetime

logging.basicConfig()

file_logger = logging.FileHandler("/tmp/aaa.log", "w")

logger = logging.getLogger()
logger.addHandler(file_logger)
logger.setLevel(logging.INFO)

with daemon.DaemonContext(files_preserve=[file_logger.stream.fileno()]):
    while True:
        logger.info(datetime.now())
        sleep(1)
于 2016-12-22T21:52:19.360 に答える