在cloudfoundry上发布项目时获取错误java.io.FileNotFoundException(log4j日志文件)
我计划将web应用程序和mysql服务一起迁移到cloudfoundry。但我的错误率越来越低 它与当地环境配合得很好。日志文件也会生成 下面是错误日志:在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
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在某处发布日志消息,而不依赖本地文件系统访问。但这会更改日志文件的目录。在哪里更改?