Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/logging/2.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_Logging_Daemon - Fatal编程技术网

Python日志守护进程破坏文件句柄

Python日志守护进程破坏文件句柄,python,logging,daemon,Python,Logging,Daemon,我的脚本很好地记录到一个文件,直到我尝试将它转移到后台,此时文件句柄关闭,即使我使用filesprecove。如何以轻量级的方式改进此功能,使记录器在后台运行 #!/usr/bin/env python from socket import * import sys, time, logging import daemon context = daemon.DaemonContext() logger = logging.getLogger('audit') hdlr = log

我的脚本很好地记录到一个文件,直到我尝试将它转移到后台,此时文件句柄关闭,即使我使用filesprecove。如何以轻量级的方式改进此功能,使记录器在后台运行

#!/usr/bin/env python

from socket import *     
import sys, time, logging
import daemon

context = daemon.DaemonContext()

logger = logging.getLogger('audit')
hdlr = logging.FileHandler('/mnt/audit.log')
formatter = logging.Formatter('%(asctime)s %(message)s')
hdlr.setFormatter(formatter)
logger.addHandler(hdlr)
logger.setLevel(logging.WARNING)

context.filesPreserve = [hdlr]

with context:
  HOST = ''    
  PORT = 50007    
  ADDR = (HOST,PORT)   
  BUFSIZE = 4096    #reasonably sized buffer for data

  serv = socket( AF_INET,SOCK_STREAM)
  serv.bind((ADDR))    
  serv.listen(5)    #5 is the maximum number of queued connections we'll allow

  while True:
      conn, addr = serv.accept()

  sys.stdout.write('accepted connection')

  while True: 
      data = conn.recv( 1024 )
      if not data:
          break
      else:
          logger.error ("-" * 20)
          logger.error(data)
          if "DONE" == data:
            break
  conn.close()
你想要的是:

context.files_preserve = [hdlr.stream]
因为文件需要一个文件处理程序


您可以看到更多信息

我没有类似Unix的系统来测试这一点,所以我帮不了什么忙。虽然一开始我有点困惑,因为这个问题似乎是谷歌对
Python filepreserve
唯一相关的热门话题(如果你说服谷歌不要再推销它的话)。它是Python
守护进程
模块中的
DaemonContext
对象的属性,如中所述。