我使用此登录配置文件:

<configuration>
  <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
    <encoder>
      <pattern>%d{HH:mm:ss.SSS} [%-10.-10thread] %-5level %-30logger{1} - %msg%n</pattern>
    </encoder>
  </appender>

<if condition='isDefined("fileout-dir")'><then>
  <appender name="SIFT" class="ch.qos.logback.classic.sift.SiftingAppender">
     <discriminator  class="edu.kit.sdq.storagebenchmarkharness.logging.SBHThreadDiscriminator"/>
    <sift>
      <appender name="FILE-${thread}" class="ch.qos.logback.core.FileAppender">
        <file>${fileout-dir:-}${thread}.log</file>
        <append>true</append>
        <layout class="ch.qos.logback.classic.PatternLayout">
          <pattern>%d{HH:mm:ss.SSS} %-5level %-30logger{1} - %msg%n</pattern>
        </layout>
      </appender>
    </sift>
  </appender>
  <root>
    <appender-ref>SIFT</appender-ref>
  </root>
 </then> </if>

  <root level="debug">
    <appender-ref ref="STDOUT" />
  </root>
</configuration>


运行我的应用程序时,出现以下错误:

org.codehaus.commons.compiler.CompileException: Line 1, Column 45: A method named "isDefined" is not declared in any enclosing class nor any supertype, nor through a static import
    at org.codehaus.commons.compiler.CompileException: Line 1, Column 45: A method named "isDefined" is not declared in any enclosing class nor any supertype, nor through a static import
    at  at org.codehaus.janino.UnitCompiler.compileError(UnitCompiler.java:9014)
    at  at org.codehaus.janino.UnitCompiler.findIMethod(UnitCompiler.java:6549)
    at  at org.codehaus.janino.UnitCompiler.compileGet2(UnitCompiler.java:3429)
    at  at org.codehaus.janino.UnitCompiler.access$6300(UnitCompiler.java:104)
    at  at org.codehaus.janino.UnitCompiler$11.visitMethodInvocation(UnitCompiler.java:2869)
    at  at org.codehaus.janino.Java$MethodInvocation.accept(Java.java:2831)
    at  at org.codehaus.janino.UnitCompiler.compileGet(UnitCompiler.java:2890)
    at  at org.codehaus.janino.UnitCompiler.compileGetValue(UnitCompiler.java:3897)
    at  at org.codehaus.janino.UnitCompiler.compile2(UnitCompiler.java:1637)
    at  at org.codehaus.janino.UnitCompiler.access$1700(UnitCompiler.java:104)
    at  at org.codehaus.janino.UnitCompiler$5.visitReturnStatement(UnitCompiler.java:877)
    at  at org.codehaus.janino.Java$ReturnStatement.accept(Java.java:1803)
    at  at org.codehaus.janino.UnitCompiler.compile(UnitCompiler.java:888)
    at  at org.codehaus.janino.UnitCompiler.compileStatements(UnitCompiler.java:914)
    at  at org.codehaus.janino.UnitCompiler.compile(UnitCompiler.java:1999)
    at  at org.codehaus.janino.UnitCompiler.compileDeclaredMethods(UnitCompiler.java:789)
    at  at org.codehaus.janino.UnitCompiler.compileDeclaredMethods(UnitCompiler.java:770)
    at  at org.codehaus.janino.UnitCompiler.compile2(UnitCompiler.java:464)
    at  at org.codehaus.janino.UnitCompiler.compile2(UnitCompiler.java:357)
    at  at org.codehaus.janino.UnitCompiler$3.visitPackageMemberClassDeclaration(UnitCompiler.java:312)
    at  at org.codehaus.janino.Java$PackageMemberClassDeclaration.accept(Java.java:770)
    at  at org.codehaus.janino.UnitCompiler.compile(UnitCompiler.java:319)
    at  at org.codehaus.janino.UnitCompiler.compileUnit(UnitCompiler.java:288)
    at  at org.codehaus.janino.SimpleCompiler.compileToClassLoader(SimpleCompiler.java:393)
    at  at org.codehaus.janino.ClassBodyEvaluator.compileToClass(ClassBodyEvaluator.java:311)
    at  at org.codehaus.janino.ClassBodyEvaluator.cook(ClassBodyEvaluator.java:224)
    at  at org.codehaus.janino.SimpleCompiler.cook(SimpleCompiler.java:194)
    at  at org.codehaus.commons.compiler.Cookable.cook(Cookable.java:80)
    at  at org.codehaus.commons.compiler.Cookable.cook(Cookable.java:72)
    at  at ch.qos.logback.core.joran.conditional.PropertyEvalScriptBuilder.build(PropertyEvalScriptBuilder.java:34)
    at  at ch.qos.logback.core.joran.conditional.IfAction.begin(IfAction.java:43)
    at  at ch.qos.logback.core.joran.spi.Interpreter.callBeginAction(Interpreter.java:273)
    at  at ch.qos.logback.core.joran.spi.Interpreter.startElement(Interpreter.java:145)
    at  at ch.qos.logback.core.joran.spi.Interpreter.startElement(Interpreter.java:127)
    at  at ch.qos.logback.core.joran.spi.EventPlayer.play(EventPlayer.java:40)
    at  at ch.qos.logback.core.joran.spi.Interpreter.play(Interpreter.java:332)
    at  at ch.qos.logback.core.joran.GenericConfigurator.doConfigure(GenericConfigurator.java:126)
    at  at ch.qos.logback.core.joran.GenericConfigurator.doConfigure(GenericConfigurator.java:93)
    at  at ch.qos.logback.core.joran.GenericConfigurator.doConfigure(GenericConfigurator.java:52)
    at  at ch.qos.logback.classic.util.ContextInitializer.configureByResource(ContextInitializer.java:60)
    at  at ch.qos.logback.classic.util.ContextInitializer.autoConfig(ContextInitializer.java:121)
    at  at org.slf4j.impl.StaticLoggerBinder.init(StaticLoggerBinder.java:85)
    at  at org.slf4j.impl.StaticLoggerBinder.<clinit>(StaticLoggerBinder.java:55)
    at  at org.slf4j.LoggerFactory.bind(LoggerFactory.java:121)
    at  at org.slf4j.LoggerFactory.performInitialization(LoggerFactory.java:111)
    at  at org.slf4j.LoggerFactory.getILoggerFactory(LoggerFactory.java:268)
    at  at org.slf4j.LoggerFactory.getLogger(LoggerFactory.java:241)
    at  at org.slf4j.LoggerFactory.getLogger(LoggerFactory.java:254)
    at  at edu.kit.sdq.storagebenchmarkharness.Logger.getLogger(Logger.java:44)
    at  at edu.kit.sdq.storagebenchmarkharness.BenchmarkController.<clinit>(BenchmarkController.java:66)


为什么isDefined方法未知? logback docs状态它应该存在,并且至少one stack overflow线程似乎正在使用它。

我在类路径中包含了janino的最新版本,因为评估表达式需要它。如错误消息所示,janino编译器已加载。

最佳答案

确保您使用的是最新版本的Logback。另外,在回送requires the Janino library中使用条件语句。

将此添加到您的pom.xml文件中以获得依赖项:

    <!-- The org.codehaus.janino:commons-compiler:2.6.1 dependency -->
    <!-- will be automatically pulled in by Maven's transitivity rules -->
    <dependency>
        <groupId>org.codehaus.janino</groupId>
        <artifactId>janino</artifactId>
        <version>2.6.1</version>
    </dependency>

07-25 23:24