Пользовательский вход в систему с j4bppender log4j2 в Java - PullRequest
0 голосов
/ 24 мая 2019

Я пытаюсь записать свои события в базу данных, используя log4j2. В частности, я использую log4j2 jdbc appender в моем файле конфигурации свойств для этой цели. При использовании уровней журнала log4j2 по умолчанию все работает. Значения журнала успешно вставляются в базу данных. Это мой первоначальный appender в моем файле свойств log4j2:

# JDBC appender
appender.db.type = Jdbc
appender.db.name = databaseAppender
appender.db.tableName = db_name.test
appender.db.cf.type = ConnectionFactory
appender.db.cf.class = com.myproject.ConnectionFactory
appender.db.cf.method = getConnection
appender.db.col2.type = Column
appender.db.col2.name = message
appender.db.col2.pattern = %m
appender.db.col3.type = Column
appender.db.col3.name = category
appender.db.col3.pattern = %M{1}
appender.db.col4.type = Column
appender.db.col4.name = timestamp
appender.db.col4.isEventTimestamp = true
appender.db.col5.type = Column
appender.db.col5.name = log_level
appender.db.col5.pattern = %-5p
appender.db.filter.threshold.type = ThresholdFilter
appender.db.filter.threshold.level = info
appender.db.filter.threshold.onMatch = Accept
appender.db.filter.threshold.onMismatch = Deny

Но затем я попытался создать собственный уровень журнала, следуя этому сайту log4j2 https://logging.apache.org/log4j/2.x/manual/customloglevels.html

LOG.log(Level.forName("DIAG", 350), "a diagnostic message");

Он успешно регистрирует событие с определенным уровнем журнала. И даже помещает данные в базу данных, так как пороговый уровень info в моем jdbc appender. Как информация intLevel> diag intLevel.

Моя проблема в том, что если я изменил пороговый уровень на diag в моем jdbc-приложении, он вообще не работает, т.е.

appender.db.filter.threshold.level = diag

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

Другое дело, что я дернул вокруг уровня DIAG до 10, например:

LOG.log(Level.forName("DIAG", 10), "a diagnostic message");

А теперь он вставляется в базу данных, но также выдает некоторые ошибки.

2019-05-24 12:06:00,248 main WARN Error while converting string [diag] to type [class org.apache.logging.log4j.Level]. Using default value [null]. java.lang.IllegalArgumentException: Unknown level constant [DIAG].
at org.apache.logging.log4j.Level.valueOf(Level.java:320)
at org.apache.logging.log4j.core.config.plugins.convert.TypeConverters$LevelConverter.convert(TypeConverters.java:288)
at org.apache.logging.log4j.core.config.plugins.convert.TypeConverters$LevelConverter.convert(TypeConverters.java:284)
at org.apache.logging.log4j.core.config.plugins.convert.TypeConverters.convert(TypeConverters.java:419)
at org.apache.logging.log4j.core.config.plugins.visitors.AbstractPluginVisitor.convert(AbstractPluginVisitor.java:149)
at org.apache.logging.log4j.core.config.plugins.visitors.PluginAttributeVisitor.visit(PluginAttributeVisitor.java:45)
at org.apache.logging.log4j.core.config.plugins.util.PluginBuilder.generateParameters(PluginBuilder.java:253)
at org.apache.logging.log4j.core.config.plugins.util.PluginBuilder.build(PluginBuilder.java:135)
at org.apache.logging.log4j.core.config.AbstractConfiguration.createPluginObject(AbstractConfiguration.java:964)
at org.apache.logging.log4j.core.config.AbstractConfiguration.createConfiguration(AbstractConfiguration.java:904)
at org.apache.logging.log4j.core.config.AbstractConfiguration.createConfiguration(AbstractConfiguration.java:896)
at org.apache.logging.log4j.core.config.AbstractConfiguration.createConfiguration(AbstractConfiguration.java:896)
at org.apache.logging.log4j.core.config.AbstractConfiguration.doConfigure(AbstractConfiguration.java:514)
at org.apache.logging.log4j.core.config.AbstractConfiguration.initialize(AbstractConfiguration.java:238)
at org.apache.logging.log4j.core.config.AbstractConfiguration.start(AbstractConfiguration.java:250)
at org.apache.logging.log4j.core.LoggerContext.setConfiguration(LoggerContext.java:548)
at org.apache.logging.log4j.core.LoggerContext.reconfigure(LoggerContext.java:620)
at org.apache.logging.log4j.core.LoggerContext.reconfigure(LoggerContext.java:637)
at org.apache.logging.log4j.core.LoggerContext.start(LoggerContext.java:231)
at org.apache.logging.log4j.core.impl.Log4jContextFactory.getContext(Log4jContextFactory.java:153)
at org.apache.logging.log4j.core.impl.Log4jContextFactory.getContext(Log4jContextFactory.java:45)
at org.apache.logging.log4j.LogManager.getContext(LogManager.java:194)
at org.apache.logging.log4j.LogManager.getLogger(LogManager.java:581)
at com.myproject.Main.<clinit>(Main.java:35)

Любая помощь будет принята с благодарностью. Заранее благодарю.

1 Ответ

0 голосов
/ 24 мая 2019

Поскольку вы не определили intLevel в файле log4j2.properties, добавьте

customLevel.DIAG =350 

, где 350 - это intLevel.

Это может устранить ошибку.

...