Куда поместить 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.