powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Java [игнор отключен] [закрыт для гостей] / Пишем лог (log4j) в БД
16 сообщений из 16, страница 1 из 1
Пишем лог (log4j) в БД
    #38912454
Konstantin_d
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Добрый день!

Пытаюсь настроить log4j, что бы он писал в БД, в результате лезут ошибки:

Код: plaintext
1.
2.
3.
4.
log4j:WARN No such property  in org.apache.log4j.jdbc.JDBCAppender.
log4j:WARN No appenders could be found for logger (org.apache.struts.util.PropertyMessageResources).
log4j:WARN Please initialize the log4j system properly.
log4j:WARN See  http://logging.apache.org/log4j/1.2/faq.html#noconfig  for more info.

log4j.xml
Код: xml
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE log4j:configuration SYSTEM "log4j.dtd">
<log4j:configuration>

<appender name="DB" class="org.apache.log4j.jdbc.JDBCAppender">
   <param name="url" value="jdbc:oracle:thin:@localhost:1521:XE"/>
   <param name="driver" value="oracle.jdbc.driver.OracleDriver"/>
   <param name="user" value="user"/>
   <param name="password" value="password"/>
   
   <layout class="org.apache.log4j.PatternLayout">
   	<param name="ConversionPattern" value="INSERT INTO PASS_PROTOCOL (PRO_DATE,PRO_LOGGER,PRO_LEVEL,PRO_MESSAGE,PRO_USER_ID) VALUES ('%d{dd.MM.yyyy HH:mm:ss.SSS}','%C','%p','%m','%x')"/>
   </layout>
</appender>

<logger name="log4j.rootLogger" additivity="false">
   <level value="DEBUG"/>
   <appender-ref ref="DB"/>
</logger>

</log4j:configuration>



Кто сталкивался с подобными ошибками, подскажите, что не так сделал в log4j.xml.
...
Рейтинг: 0 / 0
Пишем лог (log4j) в БД
    #38912611
Partisan M
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Не мы пишем, а вы пишете. Я не пишу лог в базу, поскольку это неудачная идея. Но посмотрев названия параметров, думаю, что должно быть не url, а URL.
...
Рейтинг: 0 / 0
Пишем лог (log4j) в БД
    #38913657
Basil A. Sidorov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ошибка, при которой log4j не может найти логеров, обычно, означает, что log4j-xxx.jar или недоступен вообще или доступен в более, чем одной инкарнации.
...
Рейтинг: 0 / 0
Пишем лог (log4j) в БД
    #38913788
Konstantin_d
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Если переделать log4j.xml чтобы писало в файл всё работает отлично.
...
Рейтинг: 0 / 0
Пишем лог (log4j) в БД
    #38913801
Partisan M
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Basil A SidorovОшибка, при которой log4j не может найти логеров, обычно, означает, что log4j-xxx.jar или недоступен вообще или доступен в более, чем одной инкарнации.

Невозможно, т.к. log4j-xxx.jar это и есть log4j и он нашёлся, раз видны сообщения от него. Если же log4j.jar есть в нескольких местах, то просто работает один из них. Сложнее разобраться, какие настройки работают, если есть несколько файлов log4j.properties и log4j.xml, но к данному случаю это не относится.
Сущность ошибки видна из сообщения о ней:
log4jog4j:WARN No such property in org.apache.log4j.jdbc.JDBCAppender

то есть, в добавителе JDBCAppender нет свойства "url".
Действительно, есть свойство "URL", что я и ответил.
Другая возможная причина этой ошибки - если в одной из прежних версий org.apache.log4j.jdbc.JDBCAppender не было указанного свойства, а оно взято из более новой версии, в которой появилось. Не стал проверять это, поскольку как же соединяться с базой без URL или заменяющего свойства, которого нет.
...
Рейтинг: 0 / 0
Пишем лог (log4j) в БД
    #38913973
Basil A. Sidorov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Partisan MНевозможно, т.к. log4j-xxx.jar это и есть log4j и он нашёлся, раз видны сообщения от негоВозможно, т.к. конфигурирование может начаться "очень рано". Если к этому моменту не будет подходящего загрузчика или окажутся доступны более одного log4j-xxx.jar, то ругань будет означает: "была какая-то фигня, чтозанафик - не знаю, но работать не могу".

P.S. Выругаться в System.err - много ума не надо.
...
Рейтинг: 0 / 0
Пишем лог (log4j) в БД
    #38913975
Basil A. Sidorov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Но, таки, в данном конкретном случае всё видится, но апендер не сконфигурировался из-за ошибки в параметрах и, в этом смысле, моё замечание не относится к ситуации.
...
Рейтинг: 0 / 0
Пишем лог (log4j) в БД
    #38914111
Konstantin_d
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Решил повторно подключить log4j 2 к среде (JDeveloper).
По порядку:
1. Скачал apache-log4j-2.2-bin.
2. Из архива достал log4j-api-2.2 и log4j-core-2.2 и положил в WEB-INF\lib
3. Подключил log4j-api-2.2 и log4j-core-2.2 к среде.
4. Подключил log4j-api-2.2 и log4j-core-2.2 к проекту.
5. Добавил в сервлет:
Код: java
1.
2.
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;



В результате логгер не подключался:
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
import java.sql.SQLException;
import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.StringTokenizer;
import Propusk.Common.Utility;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;

public class VData extends HttpServlet 
{
  private static final String CONTENT_TYPE = "text/xml; charset=windows-1251";
  private static final String DOC_TYPE;
  private static final Logger log = LogManager.getLogger(VData.class.getName());
  
  User user;
  DBprocessing dbw= new  DBprocessing();
  DBprocessing dbw1= new  DBprocessing();
  DBprocessing dbw2= new  DBprocessing();
  Utility util = new Utility();
  SessionData s_sd = new SessionData();
  
  protected HttpSession session = null;
  protected String contextPath = null;
  private StringBuffer sbXML = null;
  private StringBuffer sbXML1 = null;
  private StringBuffer sbXML2 = null;  
  private StringBuffer sb = null;
  private StringBuffer sb1 = null;
  private StringBuffer sb2 = null; 


Код: plaintext
1.
2.
3.
4.
Error(19,33): cannot access class org.apache.logging.log4j.LogManager; class file has wrong version 50.0, should be 45.3 or 46.0 or 47.0 or 48.0
Error(20,33): cannot access class org.apache.logging.log4j.Logger; class file has wrong version 50.0, should be 45.3 or 46.0 or 47.0 or 48.0
Error(26,24): class Logger not found in class Propusk.Data.VData
Error(26,37): variable LogManager not found in class Propusk.Data.VData

Что не так делаю или что-то не подключаю?
...
Рейтинг: 0 / 0
Пишем лог (log4j) в БД
    #38914144
Partisan M
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ошибка показана в сообщении: ваш log4j откомпилирован для версии Java-классов 50.0 (то есть, JDK 1.6), а у вас в проекте указано использование уровня совместимости с JDK 1.4 (версия классов 48). Поэтому классы log4j не могут быть загружены. Не знаю, можно ли откомпировать эту версию log4j для JDK 1.4, но вам как начинающему это будет сложно. Но нет никакой разумной причины применять JDK 1.4 или указывать в настройках проекта совместимость с ним. Нет смысла использовать JDK старее, чем 1.6, да и тот устарел. В общем, установите более поздний JDK и настройте проект в JDeveloper-е на его использование и на совместимость по языку с версией не ниже 1.6. Если вам нужен именно JDeveloper (чаще всего применяется Eclipse), то убедитесь, что он сам не слишком старый. Новую версию можно бесплатно списать с сайта Oracle.
...
Рейтинг: 0 / 0
Пишем лог (log4j) в БД
    #38915074
Basil A. Sidorov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Log4j 2 requires Java 6 .
На самом видном месте, но прочитать всё равно лень.
...
Рейтинг: 0 / 0
Пишем лог (log4j) в БД
    #38916920
Konstantin_d
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Подгрузил нужный Log4j, изменил log4j.properties.


# Set appender specific options

log4j.rootLogger=INFO, A1, R
log4j.appender.A1=org.apache.log4j.ConsoleAppender
log4j.appender.A1.layout=org.apache.log4j.PatternLayout
log4j.appender.A1.layout.ConversionPattern=%d %p %C{1}.%M():%L %m%n
log4j.logger.net.sf.jsptree=DEBUG
#INFO
log4j.Logger.JDBCAppender = INFO, R
log4j.appender.R=org.apache.log4j.jdbc.JDBCAppender
log4j.appender.R.URL=jdbc:oracle:thin:@localhost:1521:XE
log4j.appender.R.user=SYSTEM
log4j.appender.R.password=arm0dki
log4j.appender.R.sql=INSERT INTO PASS_PROTOCOL (PRO_DATE,PRO_LOGGER,PRO_LEVEL,PRO_MESSAGE,PRO_USER_ID) VALUES ('%d{dd.MM.yyyy HH:mm:ss}','%C','%p','%M','(%L): (%t): %M%n')

log4j.appender.R.layout=org.apache.log4j.PatternLayout


Спасибо за подсказки.
...
Рейтинг: 0 / 0
Пишем лог (log4j) в БД
    #38928529
Konstantin_d
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Новая проблема.
написал такие настройки лога:
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
log4j.rootLogger=INFO, A1
log4j.Logger.JDBCAppender = INFO, A1
log4j.appender.A1.Threshold=INFO
log4j.appender.A1=org.apache.log4j.jdbc.JDBCAppender
log4j.appender.A1.URL=jdbc:oracle:thin:@localhost:1521:XE
log4j.appender.A1.user=TEM
log4j.appender.A1.password=password
log4j.appender.A1.sql=INSERT INTO PASS_PROTOCOL (PRO_DATE,PRO_LOGGER,PRO_LEVEL,PRO_MESSAGE,PRO_SYSTEM) VALUES (To_date('%d{dd.MM.yyyy HH:mm:ss}', 'DD.MM.YYYY HH24:MI:SS'),'%C{1}','%p','%M()','%r [%t] %-5p %c %x - %m%n')
log4j.appender.A1.layout=org.apache.log4j.PatternLayout



Если использую такую конструкцию - %m%n. выходит ошибка:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
15/04/07 00:37:15 log4j:ERROR Failed to excute sql
15/04/07 00:37:15 java.sql.SQLException: ORA-00917: missing comma
15/04/07 00:37:15 at oracle.jdbc.driver.DatabaseError.throwSqlException(DatabaseError.java:137)
15/04/07 00:37:15 at oracle.jdbc.driver.T4CTTIoer.processError(T4CTTIoer.java:304)
15/04/07 00:37:15 at oracle.jdbc.driver.T4CTTIoer.processError(T4CTTIoer.java:271)
15/04/07 00:37:15 at oracle.jdbc.driver.T4C8Oall.receive(T4C8Oall.java:625)
15/04/07 00:37:15 at oracle.jdbc.driver.T4CStatement.doOall8(T4CStatement.java:112)
15/04/07 00:37:15 at oracle.jdbc.driver.T4CStatement.execute_for_rows(T4CStatement.java:560)
15/04/07 00:37:15 at oracle.jdbc.driver.OracleStatement.doExecuteWithTimeout(OracleStatement.java:1153)
15/04/07 00:37:15 at oracle.jdbc.driver.OracleStatement.executeUpdate(OracleStatement.java:1578)
15/04/07 00:37:15 at org.apache.log4j.jdbc.JDBCAppender.execute(JDBCAppender.java:218)
15/04/07 00:37:15 at org.apache.log4j.jdbc.JDBCAppender.flushBuffer(JDBCAppender.java:289)
15/04/07 00:37:15 at org.apache.log4j.jdbc.JDBCAppender.append(JDBCAppender.java:186)
15/04/07 00:37:15 at org.apache.log4j.AppenderSkeleton.doAppend(AppenderSkeleton.java:251)
15/04/07 00:37:15 at org.apache.log4j.helpers.AppenderAttachableImpl.appendLoopOnAppenders(AppenderAttachableImpl.java:66)
15/04/07 00:37:15 at org.apache.log4j.Category.callAppenders(Category.java:206)
15/04/07 00:37:15 at org.apache.log4j.Category.forcedLog(Category.java:391)
15/04/07 00:37:15 at org.apache.log4j.Category.error(Category.java:305)
15/04/07 00:37:15 at Propusk.DB.Identification.Login(Identification.java:250)
15/04/07 00:37:15 at Propusk.DB.Identification.doPost(Identification.java:167)
15/04/07 00:37:15 at Propusk.DB.Identification.doGet(Identification.java:100)
15/04/07 00:37:15 at javax.servlet.http.HttpServlet.service(HttpServlet.java:740)
15/04/07 00:37:15 at javax.servlet.http.HttpServlet.service(HttpServlet.java:853)
15/04/07 00:37:15 at com.evermind.server.http.ResourceFilterChain.doFilter(ResourceFilterChain.java:65)
15/04/07 00:37:15 at oracle.security.jazn.oc4j.JAZNFilter.doFilter(Unknown Source)
15/04/07 00:37:15 at com.evermind.server.http.ServletRequestDispatcher.invoke(ServletRequestDispatcher.java:663)
15/04/07 00:37:15 at com.evermind.server.http.ServletRequestDispatcher.forwardInternal(ServletRequestDispatcher.java:330)
15/04/07 00:37:15 at com.evermind.server.http.HttpRequestHandler.processRequest(HttpRequestHandler.java:830)
15/04/07 00:37:15 at com.evermind.server.http.HttpRequestHandler.run(HttpRequestHandler.java:285)
15/04/07 00:37:15 at com.evermind.server.http.HttpRequestHandler.run(HttpRequestHandler.java:126)
15/04/07 00:37:15 at com.evermind.util.ReleasableResourcePooledExecutor$MyWorker.run(ReleasableResourcePooledExecutor.java:192)
15/04/07 00:37:15 at java.lang.Thread.run(Thread.java:534)

При этом данные в БД пишутся. Подскажите, где ошибка.
...
Рейтинг: 0 / 0
Пишем лог (log4j) в БД
    #38928606
Partisan M
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ошибка описана русским языком:
log4j15/04/07 00:37:15 log4j:ERROR Failed to excute sql
15/04/07 00:37:15 java.sql.SQLException: ORA-00917: missing comma

В SQL-операторе (очевидно, INSERT, поскольку другого нет) не хватает запятой.
Посмотреть в выводе того же в файл, какая там получается строка вывода и где в ней может не хватать запятой.
А зачем %n при выводе в таблицу. Можно убрать.
...
Рейтинг: 0 / 0
Пишем лог (log4j) в БД
    #38929680
Basil A. Sidorov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Konstantin_dЕсли использую такую конструкцию - %m%nНе надо использовать такую конструкцию (%n) - у вас не текстовый файл, чтобы разделять строки "врукопашную".
...
Рейтинг: 0 / 0
Пишем лог (log4j) в БД
    #38929707
Konstantin_d
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Определение ошибки понятно, не понятно где искать.

Написал так:
Код: java
1.
sql=INSERT INTO PASS_PROTOCOL (PRO_SYSTEM) VALUES ('%m')



Передаю так (в одном только месте)
Код: java
1.
log.info("["+user+"] Вход в систему");



????
...
Рейтинг: 0 / 0
Пишем лог (log4j) в БД
    #38929744
Basil A. Sidorov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Или сами смотрите пророческий трейс или попросите АБД выдать вам строку с ошибкой - будет понятней, в каком месте строка собралась неправильно.
...
Рейтинг: 0 / 0
16 сообщений из 16, страница 1 из 1
Форумы / Java [игнор отключен] [закрыт для гостей] / Пишем лог (log4j) в БД
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]