Python守护进程:保持日志记录
我有一个脚本,可以将一些数据记录到磁盘:Python守护进程:保持日志记录,python,python-2.7,Python,Python 2.7,我有一个脚本,可以将一些数据记录到磁盘: 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(fil
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守护进程时,日志记录停止
try:
with daemon.DaemonContext():
station = VantageProStation()
station.run()
except KeyboardInterrupt:
logging.critical('Stopping user aborted with CTRL+C')
pass
我已尝试保存文件,但logging.basicConfig不会返回流。此外,我无法使用文件\u preserve..传递多个流。
我当然想继续日志记录,但我试图将日志定义放在我的类init中,这也没有帮助。在守护进程中配置日志记录程序怎么样?这对我很有用:
#!/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()
守护程序上下文关闭所有文件处理程序,使其成为“行为良好的守护程序”,但
文件中指定的处理程序除外。你的方向是对的
有一种方法可以从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)
从守护进程中排除键盘中断是。。。strage?是的,我仍处于开发阶段,只是为了测试:)从技术上来说,上述内容是可行的,但我建议您在守护进程上下文中创建记录器。这解决了DaemonContext的许多小问题。这个gem刚刚解决了我多年来在使用它和登录时遇到的一个bug。我可以忽略一个bug,但我始终知道它的存在。在拥有DaemonContext之后,只需“设置日志记录”。