Grails:将堆栈跟踪记录到stdout

Cri*_*tan 3 grails grails-2.0

当我启动我的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/