Python-daemon:保持记录
我有一个脚本,可以把一些数据记录到磁盘上:
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里面,但这也没有帮助。
2 个回答
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)
7
你有没有想过在你的守护进程里配置日志记录器呢?这样做对我来说是有效的:
#!/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()