Форум программистов, компьютерный форум CyberForum.ru

Java и базы данных

Войти
Регистрация
Восстановить пароль
 
 
antopro
0 / 0 / 0
Регистрация: 27.10.2013
Сообщений: 47
#1

PostgreSQL При настройке log4j для jdbc вылетает exception - Java БД

08.12.2016, 22:31. Просмотров 543. Ответов 21
Метки нет (Все метки)

Моя цель - настроить логирование с сохранением в базу данных. Использую log4j. Вот сам аппендер, который у меня получился:
XML
1
2
3
4
5
6
7
8
9
10
<JDBC name="databaseAppender" tableName="APPLICATION_LOG">
            <ConnectionFactory class="com.yauhenikuntsevich.training.onlinestore.services.utils.ConnectionToDB"
                method="openConnectionToDB" />
            <Column name="EVENT_ID" literal="APPLICATION_LOG_SEQUENCE.NEXTVAL" />
            <Column name="EVENT_DATE" isEventTimestamp="true" />
            <Column name="LEVEL" pattern="%level" />
            <Column name="LOGGER" pattern="%logger" />
            <Column name="MESSAGE" pattern="%message" />
            <Column name="THROWABLE" pattern="%ex{full}" />
        </JDBC>
При помощи этого класса получаю конекшен, сам по себе он работает, проверял:
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
package com.yauhenikuntsevich.training.onlinestore.services.utils;
 
import java.sql.Connection;
import java.sql.DriverManager;
 
public class ConnectionToDB {
    private static final String URL = "jdbc:postgresql://localhost:5432/onlinestore";
    private static final String USER_NAME = "postgres";
    private static final String PASSWORD = "postgres1";
 
    public static Connection openConnectionToDB() {
        try {
            return DriverManager.getConnection(URL, USER_NAME, PASSWORD);
        } catch (Exception e) {
            System.out.println("Сonnection failed");
            e.printStackTrace();
        }
        return null;
    }
}
При этом получается зацикливание и вот такой стектрейс:

2016-12-08 21:20:10,229 ERROR Unable to write to database [jdbcManager{ description=databaseAppender, bufferSize=0, connectionSource=factory{ public static java.sql.Connection com.yauhenikuntsevich.training.onlinestore.services.utils.ConnectionToDB.openConnectionToDB() }, tableName=APPLICATION_LOG, columns=[ { name=EVENT_ID, layout=null, literal=APPLICATION_LOG_SEQUENCE.NEXTVAL, timestamp=false }, { name=EVENT_DATE, layout=null, literal=null, timestamp=true }, { name=LEVEL, layout=%level, literal=null, timestamp=false }, { name=LOGGER, layout=%logger, literal=null, timestamp=false }, { name=MESSAGE, layout=%message, literal=null, timestamp=false }, { name=THROWABLE, layout=%ex{full}, literal=null, timestamp=false } ] }] for appender [databaseAppender]. org.apache.logging.log4j.core.appender.AppenderLoggingException: Failed to insert record for log event in JDBC manager: Метод org.postgresql.jdbc.PgPreparedStatement.setNString(int, String) ещё не реализован

at org.apache.logging.log4j.core.appender.db.jdbc.JdbcDatabaseManager.writeInternal(JdbcDatabaseManager.java:125)
at org.apache.logging.log4j.core.appender.db.AbstractDatabaseManager.write(AbstractDatabaseManager.java:167)
at org.apache.logging.log4j.core.appender.db.AbstractDatabaseAppender.append(AbstractDatabaseAppender.java:105)
at org.apache.logging.log4j.core.config.AppenderControl.callAppender(AppenderControl.java:99)
at org.apache.logging.log4j.core.config.LoggerConfig.callAppenders(LoggerConfig.java:430)
at org.apache.logging.log4j.core.config.LoggerConfig.log(LoggerConfig.java:409)
at org.apache.logging.log4j.core.config.LoggerConfig.log(LoggerConfig.java:367)
at org.apache.logging.log4j.core.Logger.logMessage(Logger.java:112)
at org.apache.logging.slf4j.Log4jLogger.log(Log4jLogger.java:375)
at org.eclipse.jetty.util.log.JettyAwareLogger.log(JettyAwareLogger.java:620)
at org.eclipse.jetty.util.log.JettyAwareLogger.info(JettyAwareLogger.java:314)
at org.eclipse.jetty.util.log.Slf4jLog.info(Slf4jLog.java:74)
at org.eclipse.jetty.util.log.Log.initialized(Log.java:186)
at org.eclipse.jetty.util.log.Log.getLogger(Log.java:288)
at org.eclipse.jetty.util.log.Log.getLogger(Log.java:278)
at org.eclipse.jetty.util.component.AbstractLifeCycle.<clinit>(AbstractLifeCycle.java:35)
at com.yauhenikuntsevich.training.onlinestore.web.StartJetty.main(StartJetty.java:22)

Caused by: java.sql.SQLFeatureNotSupportedException: Метод org.postgresql.jdbc.PgPreparedStatement.setNString(int, String) ещё не реализован
at org.postgresql.Driver.notImplemented(Driver.java:646)
at org.postgresql.jdbc.PgPreparedStatement.setNString(PgPreparedStatement.java:1518)
at org.apache.logging.log4j.core.appender.db.jdbc.JdbcDatabaseManager.writeInternal(JdbcDatabaseManager.java:110)
... 16 more
Лучшие ответы (1)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
08.12.2016, 22:31
Здравствуйте! Я подобрал для вас темы с ответами на вопрос PostgreSQL При настройке log4j для jdbc вылетает exception (Java БД):

Использование Log4j для отправки сообщений по почте - Java
Здравствуйте, Кто-нибудь смог настроить log4j (в паре с Tomcat) для отсылки сообщений об ошибках по почте? Использую такую...

Можна ли на хостинге задать относительный путь для размещения лога log4j? - Java
Можна ли на хостинге задать относительный путь(относительно файлов моего сайта)для размещения лога log4j, а не абсолютный . Хостинг на...

Ошибка в jdbc+oracle: java.lang.ClassNotFoundException: oracle.jdbc.driver.OracleDriver - Java БД
Вот такой трабл: на Class.forName('oracle.jdbc.driver.OracleDriver'); отвечает java.lang.ClassNotFoundException:...

Ошибка при настройке Spring и Hibernate - Java БД
Exception in thread &quot;main&quot; org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'sessionFactory' defined...

Нужна помощь при настройке Java на Vista - Java
ПОмогите пожалуйста. Хочу заняться изучением Java. Но в учебниках написанно что нужно пописывать в панели управления путь до JDK. Смотрел...

Ошbбка при подключение oracle с помощью jdbc - Java БД
Добрый вечере. Пытаюсь подключить oracle с помощью jdbc, получаю такую ошибку: Listener refused the connection with the following...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
KEKCoGEN
Эксперт Java
1915 / 1793 / 435
Регистрация: 28.12.2010
Сообщений: 7,228
09.12.2016, 12:16 #16
antopro, он у вас не компилируется вообще.
antopro
0 / 0 / 0
Регистрация: 27.10.2013
Сообщений: 47
09.12.2016, 12:21  [ТС] #17
KEKCoGEN, вроде jetty запускается и запросы через REST-клиент работают
Миниатюры
При настройке log4j для jdbc вылетает exception  
antopro
0 / 0 / 0
Регистрация: 27.10.2013
Сообщений: 47
09.12.2016, 12:23  [ТС] #18
KEKCoGEN, тут https://github.com/Pegas-7/onlinesto...%20all%20table скрипт для пересоздания таблиц в БД. Без бд проект не будет работать, я думаю вы и так знаете. Или вы имели в виду что-то другое?
KEKCoGEN
Эксперт Java
1915 / 1793 / 435
Регистрация: 28.12.2010
Сообщений: 7,228
09.12.2016, 12:37 #19
Цитата Сообщение от antopro Посмотреть сообщение
Или вы имели в виду что-то другое?
да. имел в виду ошибки компиляции. Например
AdministratorDaoXmlImpl имплементирует интерфейс EntityDao<Administrator>
в интерфейсе есть метод
Integer update(T entity);
однако в классе AdministratorDaoXmlImpl он описан как
public void update(Administrator administrator)

и ещё несколько таких и похожих случаев. Может у вас не последний код там лежит?
antopro
0 / 0 / 0
Регистрация: 27.10.2013
Сообщений: 47
09.12.2016, 12:42  [ТС] #20
KEKCoGEN, код последний. Дело в том, что пакет dao-impl-xml создан лишь для понимания работы интерфейсов. Вся работа идет через реализацию dao-impl-db. И в spring-context пути ко всем бинам описаны без учета dao-impl-xml. Вот spring-context https://github.com/Pegas-7/onlinesto...main/resources
KEKCoGEN
Эксперт Java
1915 / 1793 / 435
Регистрация: 28.12.2010
Сообщений: 7,228
09.12.2016, 12:44 #21
Сообщение было отмечено автором темы, экспертом или модератором как ответ
antopro, ясно. Это не отменяет факта что интерфейс реализован неверно.
Проблема ваша в том что postgres действительно не реализует метод setNstring. Скорее всего вам поможет не использовать юникод в ваших колонках, тогда будет вызван обычный метод setString. Попробуйте переделать конфиг логера

XML
1
2
3
4
            <Column name="DATED" isEventTimestamp="true" isUnicode="false" />
            <Column name="LEVEL" pattern="%level" isUnicode="false" />
            <Column name="LOGGER" pattern="%logger" isUnicode="false" />
            <Column name="MESSAGE" pattern="%msg%n" isUnicode="false" />
antopro
0 / 0 / 0
Регистрация: 27.10.2013
Сообщений: 47
09.12.2016, 13:01  [ТС] #22
KEKCoGEN, спасибо, думал застрелюсь, заработало)
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
09.12.2016, 13:01
Привет! Вот еще темы с ответами:

Кодировка в консоли при работе с jdbc. Windows 10 - Java БД
Здравствуйте! Наблюдается проблема с кодировкой при работе с jdbc. Как исправить проблему?

Как сделать inner join в JDBC при работе с MySQL ? - Java БД
Подскажите, какой обьект мне использовать для обработки запроса, содержащего в тексте связывание нескольких таблиц по полям через inner...

JDBC FAQ для начинающих - Java БД
обновил, добавил удаление и батч инсерт, исправил ошибку по mysql драйверу, добавил вывод в JTable, добавил хранимки package faq.jdbc; ...

Ищу драйвер jdbc для dbf - Java БД
у меня есть zyh.sql.dbf.DBFDriver, но он меня не устраивает. какие еще драйверы есть? чтобы без проблем с кодировками и поддержкой...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
09.12.2016, 13:01
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru