2012-06-13 3 views
3

Я использую этот файл конфигурации Logback:Logback условно каротаж

<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 Unkown? logback docs утверждает, что он должен существовать, и, по-видимому, использует его как минимум one stack overflow.

Я включил самую последнюю версию janino в мой путь к классам, потому что это необходимо для оценки выражений. Компилятор janino загружается, как вы можете видеть в сообщении об ошибке.

Что я делаю неправильно?

Спасибо!

+0

Какую версию Logback вы используете? – Ceki

ответ

5

Убедитесь, что используете последнюю версию журнала. Кроме того, использование условных выражений в 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> 
+1

Функциональность logback по умолчанию для переменных может оказаться полезной. См. Http://logback.qos.ch/manual/configuration.html#defaultValuesForVariables – Ceki

+0

Просто добавить артефакт janino недостаточно. На странице janino вам также нужно добавить коммонс коммон. – djangofan

Смежные вопросы