[英]Google App Engine does not support subclasses of java.util.logging.Logger: com/ibm/icu/impl/ICULogger
[英]Can java.util.logging.Logger methods ever fail on Google App Engine?
Google App Engine使用java.util.logging.Logger
(JUL)进行所有日志记录。 因此,要记录任何内容(然后通过LogService
检索它),您只需LogService
使用JUL进行记录:
private Logger logger = Logger.getLogger(this.class.getName());
// ...
public void doWhatever() {
logger.info("This will be logged.");
}
但是,如果您阅读GAE教程/指南中的各种服务API(Memcache,Mail,Datastore等),他们都会重申您应该始终对其服务中断的可能性进行编码。 GAE甚至提供了一个CapabilitiesService
,您可以在调用任何服务方法之前检查它以查看当前是否启用该服务。
所以我问:JUL日志操作是否有可能失败:
logger.info(“我可能会失败并且不会被记录吗?”);
如果没有,为什么? 如果是这样,在JUL窒息的情况下,我可以做些什么来“故障转移”? 提前致谢。
logger.info("Can I ever fail and not get logged?");
当然它可能会失败。
这条无辜的线条背后的配置可能是:
如果您一直崩溃并试图解决问题,一种选择是将异步HTTP调用(作为日志机制)发送到另一台服务器。
此外,因为这让我在几周的地狱崩溃中笑了起来: https : //groups.google.com/d/msg/google-appengine/js5CeRWLQZ0/KrW2CpJ4JuYJ
在大多数系统中,正常运行时间是100%减去所有其他系统停机时间的总和。 此规则的例外是日志记录。 当Logging无法记录停机时间时,Uptime会上升。 因此,谷歌一直在努力建立一个比所有其他系统领先的日志系统,并在不久之后出现。
我遇到了同样的问题, 是的,日志服务可能会失败而没有错误。 你将获得的最好logger.info(...)
直到GAE改进了日志服务API),就是每分钟唤醒一个工作,然后执行logger.info(...)
。
然后运行LoggingService#fetchLogs(...)
,过滤以仅检索包含最新记录器调用的AppLogLine
,并检查以确保您可以检索它。 如果你不能,那么logger.info(...)
失败了,你可以让你的应用程序做出反应。
我总是在我的GAE应用程序上公开一个安全的servlet来ping功能服务,并要求对每个服务进行状态检查。 如果服务被禁用或关闭以进行维护,我有一个外部监视器(每5分钟检查一次这个URL)给我发短信。 您可以将此“日志检查”cron作业绑定到该类服务检查中。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.