Created
July 6, 2013 22:12
-
-
Save ngandriau/5941469 to your computer and use it in GitHub Desktop.
Sample of failure when calling the LOG generated by the @slf4j annotation.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
import groovy.util.logging.Slf4j | |
/** | |
* Created by User: ngandriau - Date: 7/6/13 - Time: 5:52 PM | |
*/ | |
@Slf4j(value = "LOG") | |
class TestLogASTAnnotation { | |
static TestLogASTAnnotation staticInstanceOfMyClass = new TestLogASTAnnotation() | |
TestLogASTAnnotation() { | |
// !!! This call fails | |
// Caused by: java.lang.NullPointerException: Cannot invoke method info() on null object | |
LOG.info "constructor call" | |
} | |
def test2Log(){ | |
// This call works | |
LOG.info "test in instance method" | |
} | |
public static void main(String[] args) { | |
// This call works | |
LOG.debug "test in static method" | |
staticInstanceOfMyClass.test2Log() | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
// It's a problem with static initializer ordering. This is a simple fix.
import groovy.util.logging.Slf4j
/**
Created by User: ngandriau - Date: 7/6/13 - Time: 5:52 PM
*/
@slf4j(value = "LOG")
class TestLogASTAnnotation {
// This must not have an initializer because LOG gets added as the last static member of the class.
static TestLogASTAnnotation staticInstanceOfMyClass
// This can go anywhere (and refer to any static member, regardless of where it is placed)
// even before the member declaration above and it will still get executed after all the
// static member initializers.
static {
staticInstanceOfMyClass = new TestLogASTAnnotation()
}
TestLogASTAnnotation() {
// !!! This call fails
// Caused by: java.lang.NullPointerException: Cannot invoke method info() on null object
// logger.info "constructor call"
LOG.info "constructor call"
}
def test2Log(){
// This call works
LOG.info "test in instance method"
}
public static void main(String[] args) {
// This call works
LOG.debug "test in static method"
}
}