當我在命令行上執行grails -skipTests -verbose -plainOutput war
時,它嘗試爲生產環境配置日誌記錄。但是,我不想在構建戰爭時進行任何應用程序日誌記錄。有人知道爲什麼Grails試圖做到這一點,以及如何避免它?謝謝。奇怪的Log4J錯誤調用grails戰爭w/Grails 2.1
它嘗試登錄到的目錄在BuildAgent上不存在。但這是重點。沒有應用程序在運行,我只是想建立一場戰爭。
我的日誌配置:
// log4j configuration
log4j = {
appenders {
def logDir = '/someDirectory/'
if (Environment.getCurrentEnvironment() in [Environment.DEVELOPMENT, Environment.TEST]) {
logDir = 'log/'
}
def logFile = "${logDir}someLog.log"
def stacktraceLogFile = "${logDir}stacktrace.log"
appender new org.apache.log4j.DailyRollingFileAppender(name: "file",
layout: pattern(conversionPattern: "%d{[ dd.MM.yy HH:mm:ss.SSS]} [%t] %-5p %c %x - %m%n"),
file: logFile,
datePattern: "'.'yyyy-MM-dd")
appender new org.apache.log4j.DailyRollingFileAppender(name: "stacktrace",
layout: pattern(conversionPattern: "%d{[ dd.MM.yy HH:mm:ss.SSS]} [%t] %-5p %c %x - %m%n"),
file: stacktraceLogFile,
datePattern: "'.'yyyy-MM-dd")
}
error 'org.codehaus.groovy.grails.web.servlet', // controllers
'org.codehaus.groovy.grails.web.pages', // GSP
'org.codehaus.groovy.grails.web.sitemesh', // layouts
'org.codehaus.groovy.grails.web.mapping.filter', // URL mapping
'org.codehaus.groovy.grails.web.mapping', // URL mapping
'org.codehaus.groovy.grails.commons', // core/classloading
'org.codehaus.groovy.grails.plugins', // plugins
'org.springframework'
root {
warn 'stdout', 'file'
environments {
production {
error 'stdout', 'file'
}
}
}
}
我的堆棧跟蹤:
java.io.FileNotFoundException: /someDirectory/stacktrace.log (No such file or directory)
at java.io.FileOutputStream.openAppend(Native Method)
at java.io.FileOutputStream.<init>(FileOutputStream.java:192)
at java.io.FileOutputStream.<init>(FileOutputStream.java:116)
at org.apache.log4j.FileAppender.setFile(FileAppender.java:294)
...
at org.codehaus.groovy.runtime.callsite.PogoMetaMethodSite$PogoCachedMethodSite.invoke(PogoMetaMethodSite.java:226)
at org.codehaus.groovy.runtime.callsite.PogoMetaMethodSite.callCurrent(PogoMetaMethodSite.java:52)
at org.codehaus.groovy.runtime.callsite.CallSiteArray.defaultCallCurrent(CallSiteArray.java:46)
at org.codehaus.groovy.runtime.callsite.AbstractCallSite.callCurrent(AbstractCallSite.java:133)
at org.codehaus.groovy.runtime.callsite.AbstractCallSite.callCurrent(AbstractCallSite.java:145)
at gant.Gant.executeTargets(Gant.groovy:590)
at org.codehaus.groovy.grails.cli.GrailsScriptRunner.executeWithGantInstance(GrailsScriptRunner.java:748)
at org.codehaus.groovy.grails.cli.GrailsScriptRunner.executeScriptFile(GrailsScriptRunner.java:551)
at org.codehaus.groovy.grails.cli.GrailsScriptRunner.executeScriptWithCaching(GrailsScriptRunner.java:452)
at org.codehaus.groovy.grails.cli.GrailsScriptRunner.callPluginOrGrailsScript(GrailsScriptRunner.java:396)
at org.codehaus.groovy.grails.cli.GrailsScriptRunner.executeCommand(GrailsScriptRunner.java:371)
at org.codehaus.groovy.grails.cli.GrailsScriptRunner.main(GrailsScriptRunner.java:232)
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.codehaus.groovy.grails.cli.support.GrailsStarter.rootLoader(GrailsStarter.java:234)
at org.codehaus.groovy.grails.cli.support.GrailsStarter.main(GrailsStarter.java:262)
更新
我剛纔注意到,只有在詳細日誌記錄與Grails的啓用此例外暴露(即在我的Jenkins構建代理上)。對我來說,這似乎是一個不受歡迎的行爲,它被正常的標準輸出日誌所隱藏。
由於更換
回答。但似乎我無法表達自己的清楚。我甚至不啓動Tomcat。我只是在建立一場戰爭。即使log4j試圖寫入該日誌文件,我不明白爲什麼 – 2012-08-10 08:04:14
請閱讀我的整個答案。 – 2012-08-10 08:14:51
對不起,再次感謝再次推我的頭:-) 但這正是我想知道的。如果這些命令需要它,爲什麼它是這樣。因爲當我知道時,我知道該怎麼做。 我會在後面深入您的替代建議。 – 2012-08-10 09:57:59