Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/394.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
java.util.logging.Logger方法在Google应用程序引擎上是否会失败?_Java_Google App Engine_Logging_Java.util.logging - Fatal编程技术网

java.util.logging.Logger方法在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

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.");
}
但是,如果您阅读了GAE教程/指南,了解它们的各种服务API(Memcache、Mail、Datastore等),它们都重申您应该始终编写代码,以防它们的一项服务出现故障。GAE甚至提供了一个
CapabilitiesService
,您可以在调用任何服务方法之前检查该服务当前是否已启用

所以我问:7月份的日志记录操作是否有可能失败:

info(“我会失败而不被记录吗?”)

若否,原因为何?如果是这样,在JUL窒息的情况下,我能做些什么来“故障切换”?提前谢谢

logger.info("Can I ever fail and not get logged?");
当然,它可能会失败

这条看似天真的线条后面的配置可能:

  • 向控制台写入消息(控制台写入可能尚未初始化,或已关闭)
  • 将消息附加到文件(可能由于许多与文件I/O相关的原因而失败)
  • 发送电子邮件(可能由于许多套接字I/O相关原因而失败)
  • 写入数据库(可能由于许多与数据库相关的原因而失败)

如果您一直在崩溃并试图找出原因,那么一个选项是将异步HTTP调用(作为日志机制)发送到另一台服务器


还有,因为这让我在几周的地狱之旅中露出了笑容:

在大多数系统中,正常运行时间是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太可笑了。