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

Пытаюсь настроить 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
22.03.2015, 21:22
    #38912611
Partisan M
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Пишем лог (log4j) в БД
Не мы пишем, а вы пишете. Я не пишу лог в базу, поскольку это неудачная идея. Но посмотрев названия параметров, думаю, что должно быть не url, а URL.
...
Рейтинг: 0 / 0
23.03.2015, 15:52
    #38913657
Basil A. Sidorov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Пишем лог (log4j) в БД
Ошибка, при которой log4j не может найти логеров, обычно, означает, что log4j-xxx.jar или недоступен вообще или доступен в более, чем одной инкарнации.
...
Рейтинг: 0 / 0
23.03.2015, 16:57
    #38913788
Konstantin_d
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Пишем лог (log4j) в БД
Если переделать log4j.xml чтобы писало в файл всё работает отлично.
...
Рейтинг: 0 / 0
23.03.2015, 17:05
    #38913801
Partisan M
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Пишем лог (log4j) в БД
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
23.03.2015, 18:52
    #38913973
Basil A. Sidorov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Пишем лог (log4j) в БД
Partisan MНевозможно, т.к. log4j-xxx.jar это и есть log4j и он нашёлся, раз видны сообщения от негоВозможно, т.к. конфигурирование может начаться "очень рано". Если к этому моменту не будет подходящего загрузчика или окажутся доступны более одного log4j-xxx.jar, то ругань будет означает: "была какая-то фигня, чтозанафик - не знаю, но работать не могу".

P.S. Выругаться в System.err - много ума не надо.
...
Рейтинг: 0 / 0
23.03.2015, 18:55
    #38913975
Basil A. Sidorov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Пишем лог (log4j) в БД
Но, таки, в данном конкретном случае всё видится, но апендер не сконфигурировался из-за ошибки в параметрах и, в этом смысле, моё замечание не относится к ситуации.
...
Рейтинг: 0 / 0
23.03.2015, 20:49
    #38914111
Konstantin_d
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Пишем лог (log4j) в БД
Решил повторно подключить 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
23.03.2015, 21:40
    #38914144
Partisan M
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Пишем лог (log4j) в БД
Ошибка показана в сообщении: ваш 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
24.03.2015, 15:06
    #38915074
Basil A. Sidorov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Пишем лог (log4j) в БД
Log4j 2 requires Java 6 .
На самом видном месте, но прочитать всё равно лень.
...
Рейтинг: 0 / 0
25.03.2015, 19:32
    #38916920
Konstantin_d
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Пишем лог (log4j) в БД
Подгрузил нужный 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
06.04.2015, 21:01
    #38928529
Konstantin_d
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Пишем лог (log4j) в БД
Новая проблема.
написал такие настройки лога:
Код: 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
06.04.2015, 23:43
    #38928606
Partisan M
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Пишем лог (log4j) в БД
Ошибка описана русским языком:
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
07.04.2015, 18:03
    #38929680
Basil A. Sidorov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Пишем лог (log4j) в БД
Konstantin_dЕсли использую такую конструкцию - %m%nНе надо использовать такую конструкцию (%n) - у вас не текстовый файл, чтобы разделять строки "врукопашную".
...
Рейтинг: 0 / 0
07.04.2015, 18:22
    #38929707
Konstantin_d
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Пишем лог (log4j) в БД
Определение ошибки понятно, не понятно где искать.

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



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



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


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