我遇到关机代码问题。所以我做了一个最小的后端servlet来测试它。
那里的任何人都知道关闭钩子是否可靠!?
我的日志目前根本没有显示任何 _ah / stop 行。
我怀疑它可能与日志消失有关但想要确认。即 ApiProxi.flushLogs()在关机模式下不起作用。
一个有趣的说法是,当我生气并重复这一行(15次)......
log.info("LIFECYCLE - Shutdown hook invoked");
...我看到 _ah / stop 行。
@Override
public void destroy() {
super.destroy();
log.info("LIFECYCLE - Shutting down");
ApiProxy.flushLogs();
}
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
log.info("doGet()");
ApiProxy.flushLogs();
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
log.info("doPost()");
ApiProxy.flushLogs();
}
@Override
public void init(ServletConfig config) throws ServletException {
super.init(config);
log.info("LIFECYCLE - Starting up");
ApiProxy.flushLogs();
LifecycleManager.getInstance().setShutdownHook(new ShutdownHook() {
public void shutdown() {
log.info("LIFECYCLE - Shutdown hook invoked");
ApiProxy.flushLogs();
}
});
}
@Override
public void destroy() {
super.destroy();
log.info("LIFECYCLE - Shutting down");
ApiProxy.flushLogs();
}
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
log.info("doGet()");
ApiProxy.flushLogs();
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
log.info("doPost()");
ApiProxy.flushLogs();
}
答案 0 :(得分:0)
您是否阅读过手册?
https://developers.google.com/appengine/docs/java/backends/?hl=en#Shutdown
您可以手动关闭后端以触发关机处理程序。但是,是的,它们可以随机发生。
答案 1 :(得分:0)
似乎无法保证调用关机处理程序。这几乎一直发生在我的应用程序中。我正在使用python2.7并注册一个关闭处理程序来记录一些信息。不会在95%的时间内被召唤。后端日志表示,由于后端需要很长时间才能关闭,因此进程终止。