Python日志记录-守护进程中没有文件句柄

时间:2018-11-13 12:45:41

标签: python logging daemon

我的问题和这里的一样: Python logging daemon destroys file handle 但是该解决方案对我不起作用。

问题
我从OSError: [Errno 9] Bad file descriptor(从python-daemon)运行的行logger.info("some log")中收到daemon.DaemonContext()错误

我确保在守护进程中保留logging.FileHandler的文件句柄

        app = App()
        context = daemon.DaemonContext(
            working_directory=PROCESS_HOME,
            umask=0o002,
            pidfile=pidfile,
            stdout=sys.stdout, # <- only there for debugging
            stdin=sys.stdin,
            stderr=sys.stderr,
            files_preserve=[app.logger_fh_.stream],
            signal_map={
                signal.SIGTERM: app.stop,
                signal.SIGHUP: app.stop,
                signal.SIGUSR1: app.refresh
            }
        )

        # any calls to app.logger.info(...) work here

        with context:
           # now calls to app.logger.info(...) fail
           app.start()

记录器的配置如下

        # inside App()
        logger = logging.getLogger(__name__)
        logger.setLevel(logging.DEBUG)
        formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s')

        fh = logging.FileHandler(logging_path)
        fh.setFormatter(formatter)
        fh.setLevel(logging.DEBUG)
        logger.addHandler(fh)

        self.logger = logger
        self.logger_fh_ = fh

编辑

文档说

  

列表元素[即files_preserve]是文件描述符(由文件对象的fileno()方法返回)或Python文件对象。每个都指定一个在守护程序启动期间不关闭的文件。

所以我也添加了app.logger_fh_.stream.fileno()。问题仍然存在

感谢您的帮助

0 个答案:

没有答案