Since Grails 3 the logging configuration is in a separate file. Before Grails 3 we could specify the logging configuration in grails-app/conf/Config.groovy
, since Grails 3 it is in the file grails-app/conf/logback.groovy
. We also notice that since Grails 3 the default logging framework implementation is Logback. We can define a different Logback configuration file with the environment configuration property logging.config
. We can set this property in grails-app/conf/application.yml
, as Java system property (-Dlogging.config=<location>
) or environment variable (LOGGING_CONFIG
). Actually all rules for external configuration of Spring Boot apply for the configuration property logging.config
.
In the following example configuration file we have a different way of logging in our Grails application. We save it as grails-app/conf/logback-grails.groovy
:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 | // File: grails-app/conf/logback-grails.groovy import grails.util.BuildSettings import grails.util.Environment import org.springframework.boot.ApplicationPid import java.nio.charset.Charset // Log information about the configuration. statusListener(OnConsoleStatusListener) // Get PID for Grails application. // We use it in the logging output. if (!System.getProperty( "PID" )) { System.setProperty( "PID" , ( new ApplicationPid()).toString()) } conversionRule 'clr' , org.springframework.boot.logging.logback.ColorConverter conversionRule 'wex' , org.springframework.boot.logging.logback.WhitespaceThrowableProxyConverter // See http://logback.qos.ch/manual/groovy.html for details on configuration appender( 'STDOUT' , ConsoleAppender) { encoder(PatternLayoutEncoder) { charset = Charset.forName( 'UTF-8' ) pattern = '%clr(%d{yyyy-MM-dd HH:mm:ss.SSS}){faint} ' + // Date '%clr(%5p) ' + // Log level '%clr(%property{PID}){magenta} ' + // PID '%clr(---){faint} %clr([%15.15t]){faint} ' + // Thread '%clr(%-40.40logger{39}){cyan} %clr(:){faint} ' + // Logger '%m%n%wex' // Message } } root(WARN, [ 'STDOUT' ]) if (Environment.current == Environment.DEVELOPMENT) { root(INFO, [ 'STDOUT' ]) def targetDir = BuildSettings.TARGET_DIR if (targetDir) { appender( "FULL_STACKTRACE" , FileAppender) { file = "${targetDir}/stacktrace.log" append = true encoder(PatternLayoutEncoder) { pattern = "%level %logger - %msg%n" } } logger( "StackTrace" , ERROR, [ 'FULL_STACKTRACE' ], false ) } } |
We use this configuration file with the following command:
$ LOGGING_CONFIG=classpath:logback-grails.groovy grails run-app ... 2015-09-28 16:52:38.758 INFO 26895 --- [ main] o.a.c.c.C.[Tomcat].[localhost].[/] : Initializing Spring FrameworkServlet 'grailsDispatcherServlet' 2015-09-28 16:52:38.758 INFO 26895 --- [ main] o.g.w.s.mvc.GrailsDispatcherServlet : FrameworkServlet 'grailsDispatcherServlet': initialization started 2015-09-28 16:52:38.769 INFO 26895 --- [ main] o.g.w.s.mvc.GrailsDispatcherServlet : FrameworkServlet 'grailsDispatcherServlet': initialization completed in 11 ms 2015-09-28 16:52:38.769 INFO 26895 --- [ main] s.b.c.e.t.TomcatEmbeddedServletContainer : Tomcat started on port(s): 8080 (http) ... |
Written with Grails 3.0.8.