Grails Goodness: Log Startup Info
We can let Grails log some extra information when the application starts. Like the process ID (PID) of the application and on which machine the application starts. And the time needed to start the application. The GrailsApp
class has a property logStartupInfo
which is true
by default. If the property is true than some extra lines are logged at INFO and DEBUG level of the logger of our Application
class.
So in order to see this information we must configure our logging in the logback.groovy
file. Suppose our Application
class is in the package mrhaki.grails.sample.Application
then we add the following line to see the output of the startup logging on the console:
...
logger 'mrhaki.grails.sample.Application', DEBUG, ['STDOUT'], false
...
When we run our Grails application we see the following in our console:
...
INFO mrhaki.grails.sample.Application - Starting Application on mrhaki-jdriven.local with PID 20948 (/Users/mrhaki/Projects/blog/posts/sample/build/classes/main started by mrhaki in /Users/mrhaki/Projects/mrhaki.com/blog/posts/sample/)
DEBUG mrhaki.grails.sample.Application - Running with Spring Boot v1.2.3.RELEASE, Spring v4.1.6.RELEASE
INFO mrhaki.grails.sample.Application - Started Application in 8.29 seconds (JVM running for 9.906)
Grails application running at http://localhost:8080
...
If we want to add some extra logging we can override the logStartupInfo
method:
package mrhaki.grails.sample
import grails.boot.GrailsApp
import grails.boot.config.GrailsAutoConfiguration
import grails.util.*
import groovy.transform.InheritConstructors
class Application extends GrailsAutoConfiguration {
static void main(String[] args) {
// Use extended GrailsApp to run.
new StartupGrailsApp(Application).run(args)
}
}
@InheritConstructors
class StartupGrailsApp extends GrailsApp {
@Override
protected void logStartupInfo(boolean isRoot) {
// Show default info.
super.logStartupInfo(isRoot)
// And add some extra logging information.
// We use the same logger if we get the
// applicationLog property.
if (applicationLog.debugEnabled) {
final metaInfo = Metadata.getCurrent()
final String grailsVersion = GrailsUtil.grailsVersion
applicationLog.debug "Running with Grails v${grailsVersion}"
final sysprops = System.properties
applicationLog.debug "Running on ${sysprops.'os.name'} v${sysprops.'os.version'}"
}
}
}
If we run the application we see in the console:
...
DEBUG mrhaki.grails.sample.Application - Running with Spring Boot v1.2.3.RELEASE, Spring v4.1.6.RELEASE
DEBUG mrhaki.grails.sample.Application - Running with Grails v3.0.1
DEBUG mrhaki.grails.sample.Application - Running on Mac OS X v10.10.3
...
Written with Grails 3.0.1.