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 传递多个流..?
我当然希望我的日志记录继续,我试图将日志定义放在我的类init中,但这也无济于事。

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 回答