Я пытаюсь записать свои события в базу данных, используя log4j2
.В частности, я использую log4j2
jdbc appender
в моем файле конфигурации свойств для этой цели.Это мой appender в моем файле свойств log4j2:
# Custom log levels
customLevels = D
customLevels.D.name = ACTIVITY
customLevel.ACTIVITY = 50
# 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.FactoryConnection
appender.db.cf.method = getConnection
appender.db.col1.type = Column
appender.db.col1.name = id
appender.db.col1.pattern = ${id}
appender.db.col2.type = Column
appender.db.col2.name = message
appender.db.col2.pattern = ${message}
appender.db.filter.threshold.type = ThresholdFilter
appender.db.filter.threshold.level = activity
appender.db.filter.threshold.onMatch = Accept
appender.db.filter.threshold.onMismatch = Deny
Я помещаю идентификатор строки и сообщение на карту и передаю их в свой журнал как:
Map<String, String> map = new HashMap<>();
map.put("id", "12");
map.put("message", "this is test");
LOG.log(Level.getLevel("ACTIVITY"), new StringMapMessage(map));
, и он успешно регистрируетсяэто в мою базу данных.
Теперь моя проблема в том, что я установил тип данных id в моей базе данных как VARCHAR, чтобы можно было отправлять строки отсюда.Но мой идентификатор в моей базе данных должен быть типа INT(11)
.И когда я установил, что не могу установить ведение журнала, как указано выше, поскольку StringMapMessage принимает только строковые значения.
Теперь я не могу сделать это:
Map<String, Object> map = new HashMap<>();
map.put("id", 12345); //<<<send integer value
map.put("message", "this is test");
LOG.log(Level.getLevel("ACTIVITY"), new StringMapMessage(map));
Я часами пытался использовать objectmessage и так.Как я могу решить это ??Благодаря.