2013-01-05 33 views
2

我打算將web應用程序與mysql服務一起移至cloudfoundry。但是我得到了錯誤。在cloudfoundry發佈項目時出現錯誤java.io.FileNotFoundException(log4j日誌文件)

它與當地的環境工作得很好。日誌文件也會生成。

下面是錯誤日誌:

Jan 5, 2013 7:35:59 AM org.cloudfoundry.reconfiguration.AbstractServiceConfigurer configure 
INFO: No beans of type org.springframework.amqp.rabbit.connection.ConnectionFactory found in application context 
Jan 5, 2013 7:35:59 AM org.apache.catalina.core.StandardContext start 
SEVERE: Error listenerStart 
Jan 5, 2013 7:35:59 AM org.apache.catalina.core.StandardContext start 
SEVERE: Context [] startup failed due to previous errors 
log4j:WARN Continuable parsing error 109 and column 23 
log4j:WARN The content of element type "log4j:configuration" must match "(renderer*,appender*,plugin*,(category|logger)*,root?,(categoryFactory|loggerFactory)?)". 
log4j:ERROR setFile(null,true) call failed. 
java.io.FileNotFoundException: /logs/abc-web.log (No such file or directory) 
    at java.io.FileOutputStream.openAppend(Native Method) 
    at java.io.FileOutputStream.<init>(FileOutputStream.java:177) 
    at java.io.FileOutputStream.<init>(FileOutputStream.java:102) 
    at org.apache.log4j.FileAppender.setFile(FileAppender.java:290) 
    at org.apache.log4j.RollingFileAppender.setFile(RollingFileAppender.java:194) 
    at org.apache.log4j.FileAppender.activateOptions(FileAppender.java:164) 
    at org.apache.log4j.config.PropertySetter.activate(PropertySetter.java:257) 
    at org.apache.log4j.xml.DOMConfigurator.parseAppender(DOMConfigurator.java:285) 
    at org.apache.log4j.xml.DOMConfigurator.findAppenderByName(DOMConfigurator.java:171) 
    at org.apache.log4j.xml.DOMConfigurator.findAppenderByReference(DOMConfigurator.java:184) 
    at org.apache.log4j.xml.DOMConfigurator.parseChildrenOfLoggerElement(DOMConfigurator.java:502) 
    at org.apache.log4j.xml.DOMConfigurator.parseRoot(DOMConfigurator.java:471) 
    at org.apache.log4j.xml.DOMConfigurator.parse(DOMConfigurator.java:921) 
    at org.apache.log4j.xml.DOMConfigurator.doConfigure(DOMConfigurator.java:790) 
    at org.apache.log4j.xml.DOMConfigurator.doConfigure(DOMConfigurator.java:696) 
    at org.apache.log4j.xml.DOMConfigurator.configure(DOMConfigurator.java:821) 
    at org.springframework.util.Log4jConfigurer.initLogging(Log4jConfigurer.java:69) 
    at org.springframework.web.util.Log4jWebConfigurer.initLogging(Log4jWebConfigurer.java:151) 
    at org.springframework.web.util.Log4jConfigListener.contextInitialized(Log4jConfigListener.java:45) 
    at org.apache.catalina.core.StandardContext.listenerStart(StandardContext.java:4206) 
    at org.apache.catalina.core.StandardContext.start(StandardContext.java:4705) 
    at org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.java:799) 
    at org.apache.catalina.core.ContainerBase.addChild(ContainerBase.java:779) 
    at org.apache.catalina.core.StandardHost.addChild(StandardHost.java:601) 
    at org.apache.catalina.startup.HostConfig.deployDirectory(HostConfig.java:1079) 
    at org.apache.catalina.startup.HostConfig.deployDirectories(HostConfig.java:1002) 
    at org.apache.catalina.startup.HostConfig.deployApps(HostConfig.java:506) 
    at org.apache.catalina.startup.HostConfig.start(HostConfig.java:1317) 
    at org.apache.catalina.startup.HostConfig.lifecycleEvent(HostConfig.java:324) 
    at org.apache.catalina.util.LifecycleSupport.fireLifecycleEvent(LifecycleSupport.java:142) 
    at org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1065) 
    at org.apache.catalina.core.StandardHost.start(StandardHost.java:840) 
    at org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1057) 
    at org.apache.catalina.core.StandardEngine.start(StandardEngine.java:463) 
    at org.apache.catalina.core.StandardService.start(StandardService.java:525) 
    at org.apache.catalina.core.StandardServer.start(StandardServer.java:754) 
    at org.apache.catalina.startup.Catalina.start(Catalina.java:595) 
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) 
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) 
    at java.lang.reflect.Method.invoke(Method.java:597) 
    at org.apache.catalina.startup.Bootstrap.start(Bootstrap.java:289) 
    at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:414) 
log4j:ERROR LogMananger.repositorySelector was null likely due to error in class reloading, using NOPLoggerRepository. 
Stopping Tomcat because the context stopped. 

的log4j.xml:

<appender name="fileAppender" class="org.apache.log4j.RollingFileAppender"> 
    <param name="MaxFileSize" value="25MB" /> 
    <param name="MaxBackupIndex" value="10" /> 
    <param name="File" value="/logs/abc-web.log" /> 
    <layout class="org.apache.log4j.PatternLayout"> 
     <param name="ConversionPattern" value="%d [%t] %-5p: %m (%c)%n" /> 
    </layout> 
</appender> 
+0

向我們展示你的代碼,@Mohan – hd1

回答

1

的Log4j將create directories而目錄和它的父目錄不存在。

Log4j在創建目錄或文件時拋出FileNotFoundException失敗,沒有文件priviledge。

用您的應用程序用戶檢查文件priviledge。

public 
    synchronized 
    void setFile(String fileName, boolean append, boolean bufferedIO, int bufferSize) 
                  throws IOException { 
    LogLog.debug("setFile called: "+fileName+", "+append); 

    // It does not make sense to have immediate flush and bufferedIO. 
    if(bufferedIO) { 
     setImmediateFlush(false); 
    } 

    reset(); 
    FileOutputStream ostream = null; 
    try { 
      // 
      // attempt to create file 
      // 
      ostream = new FileOutputStream(fileName, append); 
    } catch(FileNotFoundException ex) { 
      // 
      // if parent directory does not exist then 
      //  attempt to create it and try to create file 
      //  see bug 9150 
      // 
      String parentName = new File(fileName).getParent(); 
      if (parentName != null) { 
      File parentDir = new File(parentName); 
      if(!parentDir.exists() && parentDir.mkdirs()) { 
       ostream = new FileOutputStream(fileName, append); 
      } else { 
       throw ex; 
      } 
      } else { 
      throw ex; 
      } 
    } 
+0

我應該在哪裏檢查?誰給予特權? – Mohan

+0

我在STS(eclipse)中使用了cloudFoundry插件,有什麼選擇權限?請幫幫我。 – Mohan

+0

檢查此:http://support.cloudfoundry.com/entries/20024127-how-will-we-get-local-filesystem-access – imxylz

2

我有這個相同的FileNotFound異常問題。

我的解決辦法是從價值,從而去除附加「/」:

<param name="File" value="logs/abc-web.log" /> 
+1

但是這改變了日誌文件的目錄。 – flyrain