java - 在自定义日志中传递模型对象并使用 jdbc appender log4j2 将其保存到数据库
问题描述
我正在使用 log4j2 jdbc appender 登录我的数据库。我的 log4j2 属性文件当前是:
customLevel.DIAG =350
# 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 = diag
appender.db.filter.threshold.onMatch = Accept
appender.db.filter.threshold.onMismatch = Deny
当我使用以下方式记录事件时,信息会成功存储在数据库中:
LOG.log(Level.forName("DIAG", 350), "a diagnostic message");
但是现在我必须存储多种类型的消息(如数量、订购给谁),我必须为其制作模型。
public class LogModel {
String quantity, orderedTo, amount;
public LogModel(String quantity, String orderedTo, String amount) {
this.quantity = quantity;
this.orderedTo = orderedTo;
this.amount = amount;
}
public String getQuantity() {
return quantity;
}
public void setQuantity(String quantity) {
this.quantity = quantity;
}
public String getOrderedTo() {
return orderedTo;
}
public void setOrderedTo(String orderedTo) {
this.orderedTo = orderedTo;
}
public String getAmount() {
return amount;
}
public void setAmount(String amount) {
this.amount = amount;
}
}
我已经在我的 mysql 数据库中为日志相应地定义了列字段。我的问题是如何将此模型对象传递给 jdbc appender,以便它可以将数据映射到我的数据库列。
我尝试的另一件事(不需要制作模型)是使用 ThreadContext 作为:
ThreadContext.put("amount", amount);
并相应地在 log4j2 属性文件中:
appender.db.col3.type = Column
appender.db.col3.name = amount
appender.db.col3.pattern = %X{amount}
但这是我唯一的选择吗?就像我必须每次都正确清除 threadContext,否则 threadcontext 中的值适用于我的另一个日志。如果可能的话,我实际上是在使用模型对象。像这样的东西:
LogModel logModel = new LogModel("100", "Mr. John", "12345");
LOG.log(Level.forName("DIAG", 350), logModel);
您的指导将不胜感激。谢谢。
解决方案
推荐阅读
- angular - 具有平滑滚动且无对齐的离子幻灯片
- android - Firebase 电话身份验证验证限制
- c - ANSI C K&R 的位运算符
- vue.js - 尝试在 vue.js 2 上捕获事件,但没有成功
- java - 设置 Selenium FirefoxProfile 设置不一致
- python - 当数组既不为空也不损坏时,从音频文件构建的 NumPy 数组会引发零大小数组错误
- mysql - 在 SQL 中根据日期标记某些行
- angular - 在 Angular 6 中使用 ng2-smart-table 创建服务器端分页
- python-3.x - 在python中的字典中压缩任意数量的列表
- airflow - 使用气流的 DataflowPythonOperator 安排数据流作业时出错