這2天改在bae上部署代碼,為了便于程序的功能測試,引入了log4j日志,但是問題來了..測試程序采用的是sPRing3.2.8框架搭建,web.xml引入日志代碼為:
<context-param> <param-name>log4jConfigLocation</param-name> <param-value>classpath:log4j.xml</param-value> </context-param> <!-- <context-param> <param-name>webAppRootKey</param-name> <param-value>app.root</param-value> </context-param> --> <listener> <listener-class> org.springframework.web.util.Log4jConfigListener </listener-class> </listener>
部署失敗,報錯為:
2015-02-12 17:43:06,878 [localhost-startStop-4] INFO org.apache.catalina.core.ContainerBase.[Catalina].[localhost].[/]- Shutting down log4j2015-02-12 17:43:06,877 [localhost-startStop-4] ERROR org.apache.catalina.core.StandardContext- Context [] startup failed due to previous errors2015-02-12 17:43:06,877 [localhost-startStop-4] ERROR org.apache.catalina.core.StandardContext- Error listenerStartat java.lang.Thread.run(Thread.java:724)at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)at java.util.concurrent.FutureTask.run(FutureTask.java:166)at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:334)at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:471)at org.apache.catalina.startup.HostConfig$DeployWar.run(HostConfig.java:1660)at org.apache.catalina.startup.HostConfig.deployWAR(HostConfig.java:983)at org.apache.catalina.core.StandardHost.addChild(StandardHost.java:633)at org.apache.catalina.core.ContainerBase.addChild(ContainerBase.java:877)at org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.java:901)at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150)at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5434)at org.apache.catalina.core.StandardContext.listenerStart(StandardContext.java:4939)at org.springframework.web.util.Log4jConfigListener.contextInitialized(Log4jConfigListener.java:45)at org.springframework.web.util.Log4jWebConfigurer.initLogging(Log4jWebConfigurer.java:116)at org.springframework.web.util.WebUtils.setWebAppRootSystemProperty(WebUtils.java:143)java.lang.IllegalStateException: Cannot set web app root system property when WAR file is not expanded2015-02-12 17:43:06,875 [localhost-startStop-4] ERROR org.apache.catalina.core.ContainerBase.[Catalina].[localhost].[/]- Exception sending context initialized event to listener instance of class org.springframework.web.util.Log4jConfigListener2015-02-12 17:43:06,866 [localhost-startStop-4] INFO org.apache.catalina.core.ContainerBase.[Catalina].[localhost].[/]- No Spring WebapplicationInitializer types detected on classpath2015-02-12 17:43:02,593 [localhost-startStop-4] INFO org.apache.catalina.startup.HostConfig- Deploying web application archive /home/bae/app/ROOT.war
因為本地環境我無法復現,只能猜測是war打包的方式在云端部署與log4j的加載方式有沖突..
最后無奈,只好耍下賴..web.xml中不寫log4j的引入代碼,然后把log4j.xml配置文件扔到默認位置src下,讓spring自動加載...至此代碼成功部署到bae上...
至于為何標題提到了sae,因為我是被這個問題坑了,在sae上也部署不上,無奈轉到bae上,結果bae上也是一樣,才意識到問題的非偶然性...
新聞熱點
疑難解答