Куда поместить logback.groovy, чтобы при запуске скрипта Groovy он его забрал?

Как исключить следующие строки регистрации из всего, кроме моего File-Appender и мой Rolling-File-Appender?

Я не хочу видеть эти сообщения в Console-Appender,

Aug 01, 2018 1:39:58 PM groovy.sql.Sql execute
WARNING: Failed to execute:
              /* SQL that was inserting data here */
              because: ORA-00001: unique constraint (unique_constraint_name_here) violated

Вот мой logback.groovy:

appender("Console-Appender", ConsoleAppender) {
    filter(EvaluatorFilter) {
        evaluator(GEventEvaluator) {
            expression = "e.level.toInt() <= INFO.toInt()"
        }
        onMismatch = DENY
        onMatch = NEUTRAL
    }
    encoder(PatternLayoutEncoder) {
        pattern = "%msg%n"
    }
}

appender("File-Appender", FileAppender) {
    filter(ThresholdFilter) {
        level = DEBUG
    }
    file = "${LOG_PATH}/debug.log"
    encoder(PatternLayoutEncoder) {
        pattern = "%logger{35} - %msg%n"
        outputPatternAsHeader = true
    }
}

appender("RollingFile-Appender", RollingFileAppender) {
    file = "${LOG_PATH}/rollingfile.log"
    rollingPolicy(TimeBasedRollingPolicy) {
        fileNamePattern = "${LOG_ARCHIVE}/rollingfile.log%d{yyyy-MM-dd}.log"
        maxHistory = 30
        totalSizeCap = "1KB"
    }
    encoder(PatternLayoutEncoder) {
        pattern = "%msg%n"
    }
}

logger("groovy.sql.Sql", ERROR, ["File-Appender", "RollingFile-Appender"], false)
logger("java.sql", ERROR, ["File-Appender", "RollingFile-Appender"], false)
root(INFO, ["Console-Appender"])

Казалось бы, что java.sql и groovy.sql.Sql будет работать, но я продолжаю видеть, как выглядит WARNING сообщения уровня из следующего блока catch:

catch (SQLIntegrityConstraintViolationException e) {
                L.info("Skipping Duplicate Record {}:{}", row.id, row.name)
            }

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

Как мне успешно настроить это, чтобы игнорировать запись этих сообщений в Console-Appender но держи их в File-Appender?

1 ответ

logback.groovy просто отлично подбирался в том же каталоге, что и скрипты.

Проблема заключалась в том, что сообщение об ошибке записывалось в java.util.logging.Logger!

Я добавил следующее в начало моего logback.groovy сразу после импорта и фильтры начали работать:

import org.slf4j.bridge.SLF4JBridgeHandler
import java.util.logging.LogManager

LogManager.getLogManager().reset()
SLF4JBridgeHandler.install()

Я добавил

<dependency>
  <groupId>org.slf4j</groupId>
  <artifactId>jul-to-slf4j</artifactId>
  <version>1.7.25</version>
</dependency>

к моему pom.xml файл, чтобы он работал как нужно в моей IDE, и поэтому я могу сгенерировать все необходимые библиотеки для установки на моем сервере в ~/.groovy/lib каталог.

~/.groovy/lib/jul-to-slf4j-1.7.25.jar

Теперь я получаю только те строки журнала, которые мне нужны из этого оператора catch.

Другие вопросы по тегам