Передача объекта модели в пользовательский журнал и сохранение его в базе данных с помощью jdbc appender log4j2 - PullRequest
0 голосов
/ 26 мая 2019

Я использую 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, чтобы он мог отобразить данные в столбец моей базы данных.

Еще одна вещь, которую я попробовал (не требовала создания модели), использовала 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);

Ваше руководство будет высоко ценится.Благодарю.

...