当我启动我的grails应用程序时,我收到以下错误:
java.io.FileNotFoundException:stacktrace.log(权限被拒绝)
我知道这可以通过chowning一些文件/目录或通过更改日志转到的文件来解决,但我不想这样:我只想将stracktraces记录到stdout.
该文件规定:
例如,如果您希望完整堆栈跟踪转到控制台,请添加以下条目:
错误标准输出:"StackTrace"
但是:它还说明:
这不会阻止Grails尝试创建stacktrace.log文件 - 它只是重定向写入堆栈跟踪的位置.
然后:
或者,如果您根本不想使用'stacktrace'appender,请将其配置为'null'appender:
log4j = {
appenders {
'null' name: "stacktrace"
}
}
Run Code Online (Sandbox Code Playgroud)
我结合2并获得以下配置:
// log4j configuration
environments {
production {
log4j = {
appenders {
console name:'stdout', layout:pattern(conversionPattern: '%c{2} %m%n')
// Don't use stacktrace.log
'null' name: "stacktrace"
}
}
}
}
log4j = {
// print the stacktrace to stdout
error stdout:"StackTrace"
}
Run Code Online (Sandbox Code Playgroud)
不幸的是,这不起作用:
信息:部署Web应用程序存档MyBackend.war
2012年9月12日下午4:46:11 org.apache.catalina.core.StandardContext start
严重:错误listenerStart
2012年9月12日下午4:46:11 org.apache.catalina.core.StandardContext start
严重:由于先前的错误,上下文[/ MyBackend2]启动失败
不可否认,它不再尝试编写stacktrace.log,因此不再抛出Permission denied错误,但我不知道为什么应用程序无法启动因为它记录的唯一内容是"Error listenerStart"
任何人都可以帮我配置我的应用程序只是将堆栈跟踪记录到stdout?
Lar*_*ari 13
Grails Bug报告:http: //jira.grails.org/browse/GRAILS-2730 (包含一些解决方法)
如果你想要堆栈跟踪到stdout:
log4j = {
appenders {
console name:'stacktrace'
...
}
...
}
Run Code Online (Sandbox Code Playgroud)
禁用stacktrace.log:
log4j = {
appenders {
'null' name:'stacktrace'
...
}
...
}
Run Code Online (Sandbox Code Playgroud)
stacktraces到Tomcat日志目录中的特定于应用程序的日志文件
log4j = {
appenders {
rollingFile name:'stacktrace', maxFileSize:"5MB", maxBackupIndex: 10, file:"${System.getProperty('catalina.home')}/logs/${appName}_stacktrace.log", 'append':true, threshold:org.apache.log4j.Level.ALL
...
}
...
}
Run Code Online (Sandbox Code Playgroud)
感谢这篇博文:http://haxx.sinequanon.net/2008/09/grails-stacktracelog/