Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/356.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/python-2.7/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python守护进程:保持日志记录_Python_Python 2.7 - Fatal编程技术网

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之后,只需“设置日志记录”。