Настраиваемое целочисленное значение записи в log4j2 jdbc appender в java - PullRequest
0 голосов
/ 05 июля 2019

Я пытаюсь записать свои события в базу данных, используя 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 и так.Как я могу решить это ??Благодаря.

1 Ответ

0 голосов
/ 05 июля 2019

Вам не нужно указывать целое число. Вы можете передать числовое значение в String при записи в базу данных, она автоматически преобразуется в целое число. Но если вы поместите не числовое значение в поле базы данных int, вы получите сообщение об ошибке «Причина: java.sql.BatchUpdateException: неверное целочисленное значение:« не числовое (может быть) »для столбца« имя-столбца ». Поэтому будьте осторожны при передаче значения String в целочисленное поле базы данных.

Map<String, String> map = new HashMap<>();
map.put("id", "12345");   //make it String log4j2 automatically configures to int in db
map.put("message", "this is test");
LOG.log(Level.getLevel("ACTIVITY"), new StringMapMessage(map));

Приведенный выше пример является правильным решением, если вы все еще получаете ошибки, которые могут быть связаны с проблемой с других сторон. Спасибо.

...