我在部署grails应用程序时遇到了问题。
我得到以下例外:
log4j:ERROR setFile(null,true) call failed.
java.io.FileNotFoundException: stacktrace.log (Permission denied)
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:294)
at org.apache.log4j.FileAppender.activateOptions(FileAppender.java:165)
at org.apache.log4j.spi.OptionHandler$activateOptions.call(Unknown Source)
at org.codehaus.groovy.runtime.callsite.CallSiteArray.defaultCall(CallSiteArray.java:40)
at org.codehaus.groovy.runtime.callsite.AbstractCallSite.call(AbstractCallSite.java:116)
at org.codehaus.groovy.runtime.callsite.AbstractCallSite.call(AbstractCallSite.java:120)
at org.codehaus.groovy.grails.plugins.logging.Log4jConfig.createFullstackTraceAppender(Log4jConfig.groovy:177)
at org.codehaus.groovy.grails.plugins.logging.Log4jConfig.this$2$createFullstackTraceAppender(Log4jConfig.groovy)
at org.codehaus.groovy.grails.plugins.logging.Log4jConfig$this$2$createFullstackTraceAppender.callCurrent(Unknown Source)
at org.codehaus.groovy.runtime.callsite.CallSiteArray.defaultCallCurrent(CallSiteArray.java:44)
at org.codehaus.groovy.runtime.callsite.AbstractCallSite.callCurrent(AbstractCallSite.java:141)
at org.codehaus.groovy.runtime.callsite.AbstractCallSite.callCurrent(AbstractCallSite.java:145)
at org.codehaus.groovy.grails.plugins.logging.Log4jConfig.configure(Log4jConfig.groovy:145)
at org.codehaus.groovy.grails.web.util.Log4jConfigListener.contextInitialized(Log4jConfigListener.java:62)
at org.apache.catalina.core.StandardContext.listenerStart(StandardContext.java:4135)
at org.apache.catalina.core.StandardContext.start(StandardContext.java:4630)
at org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1045)
at org.apache.catalina.core.StandardHost.start(StandardHost.java:785)
at org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1045)
at org.apache.catalina.core.StandardEngine.start(StandardEngine.java:445)
at org.apache.catalina.core.StandardService.start(StandardService.java:519)
at org.apache.catalina.core.StandardServer.start(StandardServer.java:710)
at org.apache.catalina.startup.Catalina.start(Catalina.java:581)
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)
May 25, 2011 11:16:54 PM org.apache.catalina.core.ApplicationContext log
INFO: Initializing Spring root WebApplicationContext
配置中记录器的设置如下所示:
log4j = {
appenders {
rollingFile name: "stacktrace", maxFileSize: 1024, file: "/var/www/logs/myapp-stacktrace.log"
}
}
我也试过用它来禁用记录器 log4j = { appenders { 'null'名称:“stacktrace” } }
为tomcat-user
设置了此目录的权限-rwxr--r-- 1 tomcat6 root 0 May 24 18:38 myapp-stacktrace.log
根本没有成功...感谢任何反馈和帮助!!
答案 0 :(得分:8)
我在Grails 1.3.7中遇到了类似的问题并发现它已经修复了它(通过将堆栈跟踪日志推入标准的日志记录目录)
log4j = {
appenders {
rollingFile name: "stacktrace", maxFileSize: 1024, file: "/var/logs/piws-stacktrace.log"
....
答案 1 :(得分:6)
查看有关在http://www.grails.org/Deployment/#Tomcat将Tomils应用程序部署到Tomcat的官方文档。
引用相关部分......
“请注意,在默认设置下,Grails将尝试向tomcat目录写入某些文件,通常是stacktrace.log和h2数据库。您的Tomcat目录可能与root用户/组一起安装,而Tomcat服务器以用户tomcat6身份运行。这将导致应用程序无法以写入权限错误启动。更改Grails生产设置,以便将这些文件写入具有正确权限的目录的其他位置或更改Tomcat目录的所有者(对于Unix:/ var / lib / tomcat6)到tomcat6(或者你使用TOMCAT6_USER设置设置的任何tomcat用户)。“
您可以使用sudo chown tomcat6 /var/lib/tomcat6
来更改所有者(如果需要,可以替换运行tomcat的用户和正在编写日志的目录),这是大多数情况下最简单,最合适的解决方案。
答案 2 :(得分:1)
检查磁盘空间(远程镜头)并尝试修改为777以验证其权限问题。如果是,您要么不运行tomcat作为tomcat用户,要么关闭目录...