JMeter Groovy: печать для входа в класс (статический) (видимая переменная 'log' найдена в статической области видимости, но не относится к локальной ...) - PullRequest
1 голос
/ 17 октября 2019

Я хочу написать, чтобы войти в статический класс в Groovy в JMeter. Я могу печатать на терминал внутри и снаружи класса с помощью println или System.out.println. Как сделать трюк с log? В приведенном ниже коде все работает, кроме log.warn внутри класса, выдают ошибку:

Script53.groovy: 13: Apparent variable 'log' was found in a static scope but doesn't refer to a local variable, static field or class. Possible causes:
You attempted to reference a variable in the binding or an instance variable from a static context.
You misspelled a classname or statically imported field. Please check the spelling.
You attempted to use a method 'log' but left out brackets in a place not allowed by the grammar. 

Код:

import javax.script.ScriptEngine;
import javax.script.ScriptEngineManager;

class CalcMain {
static void main(def args) throws Exception {
    ScriptEngineManager factory = new ScriptEngineManager();
    ScriptEngine engine = factory.getEngineByName("groovy");

    println ("testing 1");
    System.out.println ("testing 2");
    log.warn("warn2");
  }
}
OUT.println("testing 4");
println("testing 5");
log.warn("warn 1");
CalcMain test1 = new CalcMain();
test1.main();

Я пробовал поиск в Интернете, но не смог найти ответ.

Ответы [ 3 ]

1 голос
/ 17 октября 2019

Другой вариант - отправить журнал в качестве параметра статическому методу:

static void main(org.slf4j.Logger log) throws Exception {

Метод вызова:

test1.main(log);
1 голос
/ 17 октября 2019

Вы можете использовать Groovy @Log4j аннотация:

import groovy.util.logging.Log4j

@Log4j
class CalcMain {
  static void main(def args) throws Exception {
    // some code
    log.info "hello there"
  }
}

0 голосов
/ 17 октября 2019

Я прочитал https://www.blazemeter.com/blog/top-8-jmeter-java-classes-you-should-be-using-with-groovy/, где рекомендуется использовать переменную log, но также дает ссылку на класс Logger . Я пытался играть с Logger классом, и он работает:

import javax.script.ScriptEngine;
import javax.script.ScriptEngineManager;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

class CalcMain {
    static void main(def args) throws Exception {
    ScriptEngineManager factory = new ScriptEngineManager();
    ScriptEngine engine = factory.getEngineByName("groovy");

    final Logger logger = LoggerFactory.getLogger(CalcMain.class);
    logger.warn("My warning");
    }
}
CalcMain test1 = new CalcMain();
test1.main();
...