условие входа в систему не работает

Я пытаюсь определить logback.xml, который устанавливает уровень журнала в INFO в среде PROD, а во всех других средах - в DEBUG. Поэтому у нас есть переменная среды ENV, для которой установлено значение «PROD» в среде PROD. Мой logback.xml выглядит так:

<?xml version="1.0" encoding="UTF-8"?>

<configuration>
<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
    <encoder>
        <pattern>%date{"yyyy-MM-dd'T'HH:mm:ss.SSSZ"} [%thread] %-5level %logger %mdc - %msg%n</pattern>
    </encoder>
</appender>

<appender name="aiAppender" class="com.microsoft.applicationinsights.logback.ApplicationInsightsAppender" />

<!-- Choose INFO level on PROD, DEBUG on other environments -->
<property name="logLevel" value="DEBUG" />
<if condition='property("ENV").contains("PROD")'>
    <then>
        <property name="logLevel" value="INFO" />
    </then>
</if>

<root level="${logLevel}">
    <appender-ref ref="STDOUT" />
    <appender-ref ref="aiAppender" />
</root>
</configuration>

Он должен установить для свойства "logLevel" значение INFO, если для параметра ENV установлено значение PROD. К сожалению, это не работает - независимо от того, устанавливаю ли я свойство на уровне среды (windows: SET ENV=PROD) или на уровне java vm с -D.

Любая идея, что я мог сделать неправильно?

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

09:50:06,127 |-ERROR in ch.qos.logback.core.joran.conditional.IfAction - Could not find Janino library on the class path. Skipping conditional processing.

К сожалению, даже если я добавлю его в свои зависимости Gradle, это сообщение будет появляться. Это мой build.gradle:

apply plugin: 'java-library'
apply plugin: 'maven'

sourceCompatibility = 1.8

dependencies {
    // https://mvnrepository.com/artifact/javax/javaee-api
    compileOnly group: 'javax', name: 'javaee-api', version: '7.0'

    api group: 'com.microsoft.azure', name: 'applicationinsights-core', version: '1.0.7'
    api group: 'com.microsoft.azure', name: 'applicationinsights-web', version: '1.0.7'
    api group: 'com.microsoft.azure', name: 'applicationinsights-logging-logback', version: '1.0.7'
    api group: 'org.slf4j', name: 'slf4j-api', version: '1.7.25'
    api group: 'ch.qos.logback', name: 'logback-core', version: '1.2.3'
    api group: 'ch.qos.logback', name: 'logback-classic', version: '1.2.3'

    api group: 'org.codehaus.janino', name: 'janino', version: '3.0.6'
    api group: 'org.codehaus.janino', name: 'commons-compiler', version: '3.0.6'


    testImplementation group: 'junit', name: 'junit', version: '4.11'
    testImplementation "org.mockito:mockito-core:2.+"
}

Есть идеи, почему janino до сих пор не найден в пути к классам?


person peez80    schedule 14.06.2017    source источник
comment
Не могли бы вы попытаться структурировать это как if - then-else ? Если PROD, то loglevel = PROD, иначе loglevel = DEBUG.   -  person Arnaud    schedule 14.06.2017
comment
Это была моя первая попытка - тоже не получилось.   -  person peez80    schedule 14.06.2017
comment
Я нахожусь на ранней стадии изучения подобной проблемы, которая, похоже, возникла, когда мы обновили журнал с 1.1.10 до 1.2.3. Какую версию вы используете? (И вы нашли решение своей проблемы?)   -  person JakeRobb    schedule 05.04.2018


Ответы (1)


Если у вас есть версия logback 1.2.3, вам нужна версия janino 3.1.2. Кроме того, для меня compile было недостаточно.

implementation group: 'org.codehaus.janino', name: 'janino', version: '3.1.2'

Боковое примечание: commons-compiler на самом деле не требуется для условий.

person lukaszrys    schedule 11.05.2020