我有一个Java应用程序(默认教程为https://spring.io/guides/gs/spring-boot-for-azure/的标准springboot),我通过Eclipse / maven插件azure-webapp:deploy将其“成功”部署到了WebApp(在部署过程中创建)
一旦部署,文件就位于WebApp中,我可以看到它们。如果启动成功,则可以运行应用程序,但如果启动失败,则-我不知道如何进行故障排除。我不知道在哪里可以找到错误日志,是什么原因导致了问题,以及如何解决。
作为如何使其失败的示例,请添加以下行:
throw new RuntimeException("Doomed to fail");
我尝试从“诊断日志选项卡”启用日志,希望在LogFiles / Applications下看到它们,但是该文件夹仍然为空。
如何解决无法在Azure的WebApp中启动的Java应用程序?
编辑:排查异常的其他示例:
public static void main(String[] args) {
throw new RuntimeException("start failure #21");
//SpringApplication.run(Application.class, args);
}
答案 0 :(得分:1)
要监视Java App Service Web App,可以使用下面的工具。
Azure Monitor
Azure Monitor指标:Azure App Service已加入Azure Monitor指标。这些指标可以发送到Application Insights。
Azure Monitor诊断日志:App Service诊断日志尚未安装到Azure Monitor;但是,通过为App Service Web App启用Application Insights,可以捕获类似的诊断信息,例如Web请求,异常等(请参见下面的“ Application Insights”。)
有关已随附到Azure Monitor诊断日志的Azure服务的列表,请参见此资源。
应用洞察力
Application Insights支持Java应用程序(请参阅“语言”部分)。如果您点击Java链接,就会带您到这里。
除了Windows性能计数器之外,您还可以捕获JMX计数器,并将其发送到Application Insights。
Application Insights支持的“日志记录框架”包括Log4J。由于Tomcat使用Apache的Java Commons Logging(JCL),因此可以捕获Tomcat日志。 Log4J是JCL的流行实现。
Azure Log Analytics
您可以使用处于预览状态的此连接器将Application Insights遥测发送到Azure Log Analytics。
如果您使用Logback或Log4J(v1.2或v2.0)进行跟踪,则可以将跟踪日志自动发送到Application Insights,在其中可以进行探索和搜索。
有关分步配置指南,请浏览至以下网址:-
https://docs.microsoft.com/en-us/azure/azure-monitor/app/java-trace-logs
希望有帮助。
答案 1 :(得分:0)
听起来您像按照springboot教程Deploying a Spring Boot app to Azure
来构建GitHub项目microsoft/gs-spring-boot
并部署到Azure一样,但是不起作用。
这是我遵循本教程的步骤,但是是以我自己的方式进行部署的。
SpringBoot
,并执行命令cd SpringBoot
和git clone https://github.com/microsoft/gs-spring-boot
。cd gs-spring-boot/complete
和mvnw clean package
来构建它注意:我在Linux上的Create a sample Spring Boot web app
下查看了本教程的各个部分,但是web.config
中的microsoft/gs-spring-boot/complete
文件已经可以用于Windows的Azure WebApp。但是,没有任何评论描述用于Windows或Linux的Azure WebApp的部署目标。
https://<webapp name>.scm.azurewebsites.net/DebugConsole
在浏览器中打开Kudu控制台,并将文件complete/web.config
和complete/target/gs-spring-boot-0.1.0.jar
拖到site/wwwroot
,如下图所示。然后,我启动了我的webapp,它运行正常。注意:请检查通过命令JAVA_HOME
在Azure上配置的echo %JAVA_HOME%
环境变量,如下图。
如果没有,则需要在Azure门户的Application settings
选项卡中设置Java运行时。
或者,您也可以配置web.config
文件,以将引用%JAVA_HOME%
替换为安装在Azure WebApp路径D:\Program Files\Java
中的现有Java运行时,如下所示。
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<system.webServer>
<handlers>
<add name="httpPlatformHandler" path="*" verb="*" modules="httpPlatformHandler" resourceType="Unspecified"/>
</handlers>
<!-- <httpPlatform processPath="%JAVA_HOME%\bin\java.exe" -->
<httpPlatform processPath="D:\Program Files\Java\jre1.8.0_181\bin\java.exe"
arguments="-Djava.net.preferIPv4Stack=true -Dserver.port=%HTTP_PLATFORM_PORT% -jar "%HOME%\site\wwwroot\gs-spring-boot-0.1.0.jar"">
</httpPlatform>
</system.webServer>
</configuration>
答案 2 :(得分:0)
我没有设法在基于Windows的计算机上找到日志,但是如果在基于Linux的计算机上启用日志,则会在“诊断日志”输出中看到它们。不过有一个陷阱。
有230个超时。它将等待完整的“超时”时间,直到在日志文件中生成日志为止,之后您可以通过日志文件或通过“诊断日志”来访问它们。在启动应用程序之前,请确保启用日志记录。这适用于基于Linux的计算机,我不知道它是否可以适用于基于Windows的计算机。
然后等待答案触发。事实证明,答案触发是控制台输出“ X秒内启动应用程序”中的短语。我将超时时间增加到500秒,因为尽管它在本地计算机上的启动时间为60秒,但在Microsoft Azure *的基于远程Linux的计算机上却需要430秒。
第二,我将主类的名称从“ GameStart”更改为“ Application”,然后它实际上捕获了触发器。之后,应用程序启动。在手册的任何地方都找不到提到的“直到超时-没有日志”和“触发短语”子句。
ps:作为参考,我花了20分钟上传应用程序,花了5分钟启动了它。我当时使用的是CentralUS服务器,尽管我本人也位于欧盟中部,但是cuz centralEU并没有为我解决,甚至更长的时间
-
*使用测试帐户。付费帐户上的帐号可能不同或相似。