On 02/12/2011, at 1:02 AM, Andrew Schetinin wrote:

> Hi,
> 
> I'd like to open a discussion about the logs printed by Gradle to the console.
> 
> For example, I'm taking a small example of a ZIP task that I'm currently 
> having a problem with. I'm running a Gradle script that is supposed to 
> compile a JAR file, and then ZIP it with all its dependencies. One of the 
> files is missing in the result ZIP by some reason, and I'm trying to 
> understand why - from the logs. 
> 
> task zip(type: Zip) {
>     into('utils.meteo/lib') {
>         from configurations.runtime, 'build/libs'
>     }
>     into('utils.meteo/bin') {
>         from 'dist/bin'
>     }
> }
> 
> Quiet logs are quiet - they only say that the task was successfully executed 
> - they are perfectly fine, and are not supposed to help me.
> 
> Logs printed with "-i" (at INFO level) explain to me how the modules depend 
> one on another, and why and what gets executed. It's a little better, but it 
> does not help with the task - I have no idea what is being zipped (and more 
> importantly - what's not):
> 
> :utils.meteo:zip
> Executing task ':utils.meteo:zip' due to:
> Output file trunk/utils.meteo/build/distributions/utils.meteo-0.1.zip for 
> task ':utils.meteo:zip' has changed.
> Output file trunk/utils.meteo/build/distributions/utils.meteo-0.1.zip has 
> been removed for task ':utils.meteo:zip'.
> BUILD SUCCESSFUL
> 
> Ok, may be with debug logs I'll have more info?
> 
> 15:34:45.499 [INFO] 
> [org.gradle.api.internal.changedetection.DefaultTaskArtifactStateRepository] 
> Executing task ':utils.meteo:zip' due to:
> Output file trunk/utils.meteo/build/distributions/utils.meteo-0.1.zip for 
> task ':utils.meteo:zip' has changed.
> Output file trunk/utils.meteo/build/distributions/utils.meteo-0.1.zip has 
> been removed for task ':utils.meteo:zip'.
> 15:34:45.499 [DEBUG] 
> [org.gradle.api.internal.tasks.execution.SkipUpToDateTaskExecuter] task 
> ':utils.meteo:zip' is not up-to-date
> 15:34:45.500 [DEBUG] 
> [org.gradle.api.internal.changedetection.DefaultFileCacheListener] Invalidate 
> cached files for file 
> 'trunk/utils.meteo/build/distributions/utils.meteo-0.1.zip'
> 15:34:45.501 [DEBUG] 
> [org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter] 
> Executing actions for task ':utils.meteo:zip'.
> 15:34:46.194 [DEBUG] 
> [org.gradle.api.internal.changedetection.DefaultFileCacheListener] Can cache 
> files for file 'trunk/utils.meteo/build/distributions/utils.meteo-0.1.zip'
> 15:34:46.303 [DEBUG] 
> [org.gradle.api.internal.tasks.execution.ExecuteAtMostOnceTaskExecuter] 
> Finished executing task ':utils.meteo:zip'
> 15:34:46.303 [DEBUG] [org.gradle.execution.DefaultTaskGraphExecuter] Timing: 
> Executing the DAG took 5.442 secs
> 15:34:46.305 [LIFECYCLE] [org.gradle.BuildResultLogger] 
> 15:34:46.306 [LIFECYCLE] [org.gradle.BuildResultLogger] BUILD SUCCESSFUL
> 
> No, no luck. I have to devise a way to print a list of files matching the 
> masks I've provided to the ZIP task

You could do something like this:

zip {
    eachFile { fileDetails -> logger.info("Including $fileDetails.file as 
$fileDetails.path") }
}

This is a general strategy in Gradle: often there are events you can receive to 
do your own logging when the built-in stuff doesn't work for you.


> . Now, I don't expect to get a complete list of files - it may probably be 
> too lengthy. But I'd like at least to understand what masks matched my files 
> and what masks matched no files (because they are wrong).

This is a good idea. Could you add an 'idea' posting to the forum, so we can 
track this?


> 
> BTW, lately, I was working with a large enterprise build based on BuildR, and 
> it was very difficult to maintain because of messy and very uclear logs. 
> Gradle is usually better in that respect, but not always.
> 
> My vision of the logging in a build script, by log levels:
> very quiet - only status - OK or FAIL
> quiet - default - status of executed modules and major tasks - here Gradle is 
> just perfect.
> info - what dependencies were required, what was compiled and with what 
> options, what was copied and where, what was zipped - everything I would need 
> in the morning after running a nightly build in order to understand what went 
> wrong with my build without re-running it again.
> debug - as much information as possible to debugging Gradle internals - but I 
> should never need it except for reporting a bug to Gradle developers. 
> There is a nice page that discuss logging in Gradle - 
> http://gradle.org/logging
> and I think it lacks such kind of a vision for what and when should be logged.
> It's especially important for the most basic tasks that are reused 
> extensively - like ZIP in this example. 
> 
> Regards,
> 
> Andrew Schetinin


--
Adam Murdoch
Gradle Co-founder
http://www.gradle.org
VP of Engineering, Gradleware Inc. - Gradle Training, Support, Consulting
http://www.gradleware.com

Reply via email to