Uploaded image for project: 'Groovy'
  1. Groovy
  2. GROOVY-8060

@Log annotation does not check logging enablement inside closures which are arguments to methods

    XMLWordPrintableJSON

Details

    • Bug
    • Status: Closed
    • Minor
    • Resolution: Fixed
    • 2.3.3, 2.4.8
    • 2.4.9
    • groovy-runtime
    • None
    • Windows 7, Groovy 2.3.3, JDK 1.8.0_05

    Description

      From cloned issue for an additional case:

      import groovy.util.logging.Slf4j
      import spock.lang.Specification
      
      @Slf4j
      class LoggingSpec extends Specification {
      
      
          def "makes sure groovy isn't building the string inside inactive log levels"() {
              assert log.isDebugEnabled() == false, "set the log level for this class to INFO to see the horror"
              assert log.isInfoEnabled() == true, "set the log level for this class to INFO to see the horror"
      
              CountingDoIt counter = new CountingDoIt()
      
              //http://docs.groovy-lang.org/docs/groovy-2.4.5/html/documentation/#_logging_improvements
              when: "we shouldn't evaluate"
              log.debug("this shouldn't happen ${counter.call()}".toString())
              then:
              counter.count == 0
      
              when: "we should evaluate"
              counter = new CountingDoIt()
              log.info("this should happen ${counter.call()}".toString())
              then:
              counter.count == 1
      
              when: "we're inside a closure and groovy is failing..so beware"
              counter = new CountingDoIt()
              1.times({ ignore ->
                  log.debug(counter.call())
              })
              then:
              counter.count == 0    //debug isn't enabled so this string should never be evaluated but it is
      
              when: "we're inside a closure that calls a method.  it's OK"
              counter = new CountingDoIt()
      
              1.times({ ignore ->
                  log.debug("this shouldn't happen ${doIt(counter)}".toString())
              })
              then:
              counter.count == 0
      
          }
      
      
          String doIt(CountingDoIt countingDoIt) {
              log.debug("this shouldn't happen ${countingDoIt.call()}".toString())
              "blah"
      
          }
      
          static class CountingDoIt {
              int count = 0
      
              String call() {
                  count = count + 1
                  "doneDidIt"
              }
          }
      }
      

      Attachments

        Issue Links

          Activity

            People

              paulk Paul King
              shorn Shorn
              Votes:
              0 Vote for this issue
              Watchers:
              2 Start watching this issue

              Dates

                Created:
                Updated:
                Resolved: