When I run grails -skipTests -verbose -plainOutput war on the command line, it tries to configure logging for the production environment. However, I do not want any application to register when building a war. Does anyone know why Grails is trying to do this and how to prevent it? Thanks.
The directory in which he is trying to log in does not exist in BuildAgent. But that is the point. There is no application, I just want to build a war.
My log configuration:
// 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' } } } }
My stack:
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)
Update
I just noticed that this exception is only disclosed when Grails activates verbose logging (i.e. on my Jenkins build agent). For me, this seems like an undesirable behavior that is hidden in the regular stdout protocol.
source share