我的问题和这里的一样: 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()
。问题仍然存在
感谢您的帮助