java - 在 java 中使用 log4j2 jdbc 附加程序自定义日志记录

标签 java jdbc log4j2 appender

我正在尝试使用 log4j2 在数据库中记录我的事件。具体来说,我在属性配置文件中使用 log4j2 jdbc Appender 来实现此目的。通过使用默认的 log4j2 日志级别,一切正常。日志值已成功插入数据库。 这是我的 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");

它使用定义的日志级别成功记录事件。甚至将数据放入数据库中,因为我的 jdbc 附加程序中的阈值级别是 info 。作为信息 intLevel > 诊断 intLevel。

我的问题是,如果我在 jdbc 附加程序中将阈值级别更改为 diag ,它根本不起作用,即

appender.db.filter.threshold.level = diag

我的数据库中没有插入任何内容。所以我的第一个问题是为什么它不起作用,如果可能的话请给我任何解决方案。

另一件事是我将 DIAG 的 intLevel 调整为 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)

如有任何帮助,我们将不胜感激,并提前致谢。

最佳答案

由于您尚未在 log4j2.properties 文件中定义 intLevel,因此添加

customLevel.DIAG =350 

其中 350 是 intLevel。

这可能会消除错误。

关于java - 在 java 中使用 log4j2 jdbc 附加程序自定义日志记录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56286980/

相关文章:

java - Apache Kafka-Log4j-Appender 不工作 Spark 集群模式

java - 了解 Google App Engine 数据存储区

java - 查找给定日期之后给定月份数之前的日期

java - 卡片布局面板显示错误面板 - Java Swing

java - 如何从 IntelliJ IDEA 14 连接到 Oracle Database 12c HR 模式

java - 尽管与应用程序失去连接,Oracle 是否仍保持查询在后台运行?

java - 使用额外的第三方插件运行 kafka 服务器,用于统计数据收集、日志记录等

java - 如何使用 JDBC 更新 MySQL-PreparedStatement 中未知数量的列?

java - 从 log4j 1.x 迁移到 log4j2

java - 如何修复无法调用元素 RollingFile 类 org.apache.logging.log4j.core.appender.RollingFileAppender 中的工厂方法?