java.util.logging.Logger方法在Google应用程序引擎上是否会失败?
Google应用程序引擎使用java.util.logging.Logger方法在Google应用程序引擎上是否会失败?,java,google-app-engine,logging,java.util.logging,Java,Google App Engine,Logging,Java.util.logging,Google应用程序引擎使用java.util.logging.Logger(JUL)进行所有日志记录。因此,要记录任何内容(然后通过LogService检索),您只需像平常一样记录JUL: private Logger logger = Logger.getLogger(this.class.getName()); // ... public void doWhatever() { logger.info("This will be logged."); } 但是,如果您阅读了G
java.util.logging.Logger
(JUL)进行所有日志记录。因此,要记录任何内容(然后通过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
,您可以在调用任何服务方法之前检查该服务当前是否已启用
所以我问:7月份的日志记录操作是否有可能失败:
info(“我会失败而不被记录吗?”)
若否,原因为何?如果是这样,在JUL窒息的情况下,我能做些什么来“故障切换”?提前谢谢
logger.info("Can I ever fail and not get logged?");
当然,它可能会失败
这条看似天真的线条后面的配置可能:
- 向控制台写入消息(控制台写入可能尚未初始化,或已关闭)
- 将消息附加到文件(可能由于许多与文件I/O相关的原因而失败)
- 发送电子邮件(可能由于许多套接字I/O相关原因而失败)
- 写入数据库(可能由于许多与数据库相关的原因而失败)
还有,因为这让我在几周的地狱之旅中露出了笑容: 在大多数系统中,正常运行时间是100%减去 所有其他系统。此规则的例外情况是日志记录。记录时 如果无法记录停机时间,则正常运行时间将增加。因此,谷歌一直在 努力建立一个领先于所有人的测井系统 其他系统,并在不久后出现
我也遇到了同样的问题,是的,日志记录服务可以毫无错误地失败。在GAE改进日志服务API之前,您将得到的最好结果是cron一个作业,比如说,每分钟醒来一次,然后执行
logger.info(…)
然后运行一个LoggingService#fetchLogs(…)
,进行过滤以仅检索包含最新记录器调用的AppLogLine
,并进行检查以确保可以检索它。如果不能,则logger.info(…)
会失败,您可以让应用程序按照自己的喜好进行响应
我总是在我的GAE应用程序上公开一个安全servlet,它ping功能服务并要求对每个服务进行状态检查。如果服务因维护而被禁用或关闭,我会有一个外部监视器(每5分钟检查一次此URL)向我发送一条文本消息。您可以将此“日志检查”cron作业绑定到此类服务检查中。谢谢@Alexander Pogrebynak(+1)-但是您的答案没有解决一些问题。首先,GAE文档没有提到这4种可能性(或任何其他可能出现的可能性),这告诉我,他们的工程师可能以某种方式解释了这4种可能性,GAE开发人员不需要担心它们。无论哪种方式,第二,我的另一半问题是“当JUL窒息时,我如何进行故障切换?”GAE似乎没有提供检查故障情况的方法。再次感谢。在赏金文本中,我指的是
logger.info()
,而不是logger.finfo()
。Finfo太可笑了。