在cloudfoundry上发布项目时获取错误java.io.FileNotFoundException(log4j日志文件)

在cloudfoundry上发布项目时获取错误java.io.FileNotFoundException(log4j日志文件),java,log4j,cloud-foundry,Java,Log4j,Cloud Foundry,我计划将web应用程序和mysql服务一起迁移到cloudfoundry。但我的错误率越来越低 它与当地环境配合得很好。日志文件也会生成 下面是错误日志: Jan 5, 2013 7:35:59 AM org.cloudfoundry.reconfiguration.AbstractServiceConfigurer configure INFO: No beans of type org.springframework.amqp.rabbit.connection.ConnectionFact

我计划将web应用程序和mysql服务一起迁移到cloudfoundry。但我的错误率越来越低

它与当地环境配合得很好。日志文件也会生成

下面是错误日志:

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.
2013年1月5日上午7:35:59 org.cloudfoundry.reconfiguration.AbstractServiceConfigurer configure
信息:在应用程序上下文中未找到类型为org.springframework.amqp.rabbit.connection.ConnectionFactory的bean
2013年1月5日上午7:35:59 org.apache.catalina.core.StandardContext开始
严重:listenerStart错误
2013年1月5日上午7:35:59 org.apache.catalina.core.StandardContext开始
严重:由于以前的错误,上下文[]启动失败
log4j:WARN Continuable解析错误109和第23列
log4j:警告元素类型“log4j:configuration”的内容必须匹配(renderer*、appender*、plugin*、(category | logger)*、root?、(categoryFactory | loggerFactory)?)。
log4j:错误setFile(null,true)调用失败。
java.io.FileNotFoundException:/logs/abc-web.log(没有这样的文件或目录)
位于java.io.FileOutputStream.openAppend(本机方法)
位于java.io.FileOutputStream。(FileOutputStream.java:177)
位于java.io.FileOutputStream。(FileOutputStream.java:102)
位于org.apache.log4j.FileAppender.setFile(FileAppender.java:290)
位于org.apache.log4j.RollingFileAppender.setFile(RollingFileAppender.java:194)
位于org.apache.log4j.FileAppender.activateOptions(FileAppender.java:164)
位于org.apache.log4j.config.PropertySetter.activate(PropertySetter.java:257)
位于org.apache.log4j.xml.DOMConfigurator.parseAppender(DOMConfigurator.java:285)
位于org.apache.log4j.xml.DOMConfigurator.findAppenderByName(DOMConfigurator.java:171)
位于org.apache.log4j.xml.DOMConfigurator.findAppenderByReference(DOMConfigurator.java:184)
位于org.apache.log4j.xml.DOMConfigurator.parseChildrenOfLoggerElement(DOMConfigurator.java:502)
位于org.apache.log4j.xml.DOMConfigurator.parseRoot(DOMConfigurator.java:471)
位于org.apache.log4j.xml.DOMConfigurator.parse(DOMConfigurator.java:921)
位于org.apache.log4j.xml.domconfigure(DOMConfigurator.java:790)
位于org.apache.log4j.xml.domconfigure(DOMConfigurator.java:696)
位于org.apache.log4j.xml.DOMConfigurator.configure(DOMConfigurator.java:821)
位于org.springframework.util.log4jconfig.initLogging(log4jconfig.java:69)
位于org.springframework.web.util.log4jwebconfig.initLogging(log4jwebconfig.java:151)
位于org.springframework.web.util.Log4jConfigListener.contextInitialized(Log4jConfigListener.java:45)
位于org.apache.catalina.core.StandardContext.listenerStart(StandardContext.java:4206)
位于org.apache.catalina.core.StandardContext.start(StandardContext.java:4705)
位于org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.java:799)
位于org.apache.catalina.core.ContainerBase.addChild(ContainerBase.java:779)
位于org.apache.catalina.core.StandardHost.addChild(StandardHost.java:601)
位于org.apache.catalina.startup.HostConfig.deploy目录(HostConfig.java:1079)
位于org.apache.catalina.startup.HostConfig.deploy目录(HostConfig.java:1002)
位于org.apache.catalina.startup.HostConfig.deployApps(HostConfig.java:506)
位于org.apache.catalina.startup.HostConfig.start(HostConfig.java:1317)
位于org.apache.catalina.startup.HostConfig.lifecycleEvent(HostConfig.java:324)
位于org.apache.catalina.util.LifecycleSupport.fireLifecycleEvent(LifecycleSupport.java:142)
位于org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1065)
位于org.apache.catalina.core.StandardHost.start(StandardHost.java:840)
位于org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1057)
位于org.apache.catalina.core.StandardEngine.start(StandardEngine.java:463)
位于org.apache.catalina.core.StandardService.start(StandardService.java:525)
位于org.apache.catalina.core.StandardServer.start(StandardServer.java:754)
位于org.apache.catalina.startup.catalina.start(catalina.java:595)
在sun.reflect.NativeMethodAccessorImpl.invoke0(本机方法)处
位于sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
在sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)中
位于java.lang.reflect.Method.invoke(Method.java:597)
位于org.apache.catalina.startup.Bootstrap.start(Bootstrap.java:289)
位于org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:414)
log4j:错误LogMananger.repositorySelector为null,可能是由于使用NoLoggerRepository重新加载类时出错。
正在停止Tomcat,因为上下文已停止。
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>

当目录及其父目录不存在时,Log4j将被删除

Log4j在创建目录或文件时抛出FileNotFoundException,但在没有文件权限的情况下失败

与应用程序用户一起检查文件权限

  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;
          }
    }

我有同样的FileNotFound异常问题

我的解决方案是从值中删除附加的“/”,如下所示:

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


显示您的代码,@mohan我应该在哪里检查?谁授予权限?我正在使用STS(eclipse)中的cloudFoundry插件,是否有授予权限的选项?请帮我检查一下:也许你不应该使用文件系统。在log4j或其他附录中使用org.apache.log4j.ConsoleAppender。您也可以使用RabbitMQ在某处发布日志消息,而不依赖本地文件系统访问。但这会更改日志文件的目录。在哪里更改?