2011-06-02 1 views
2

Я хочу использовать средство просмотра log4j (Chainsaw) для чтения журналов ошибок, зарегистрированных в базе данных MySql по log4j. Я немного борюсь, поскольку документация действительно разрежена.Подключение Log4J viewer (бензопилы) к базе данных MySql

[удар] Вот моя предварительный .xml конфигурация для бензопилы: [/ удар] Вот моя новый XML-конфигурация:

<?xml version="1.0" encoding="UTF-8" ?> 
<!DOCTYPE log4j:configuration > 
<log4j:configuration xmlns:log4j="http://jakarta.apache.org/log4j/" debug="true"> 
    <plugin name="CustomDBReceiver" class="org.apache.log4j.db.CustomSQLDBReceiver"> 
    <connectionSource class="org.apache.log4j.db.DriverManagerConnectionSource"> 
     <param name="password" value="my_pwd"/> 
     <param name="user" value="my_uid"/> 
     <param name="driverClass" value="org.gjt.mm.mysql.Driver"/> 
     <param name="url" value="jdbc:mysql://<my_host>:<my_host_port>/<my_database>"/> 
    </connectionSource> 
     <param name="refreshMillis" value="1000"/> 
    <param name="sql" value='select ID as ID, Logger as LOGGER, Date as TIMESTAMP, Level as LEVEL, Thread as THREAD, Message as MESSAGE, Exception as EXCEPTION, DestID as DESTID, IPAddress as IP, Stacktrace as STACKTRACE from errorlogs'/> 
    <param name="IDField" value="ID"/> 
    </plugin> 
    <root> 
    <level value="debug"/> 
    </root> 
</log4j:configuration> 

Он говорит мне, что:

No suitable driver found for jdbc:mysql://<my_host>:<my_host_port>/<my_database> 

I загрузили расширение DBReceiver (log4j-db-1.3alpha-7) и поместили его в мой каталог .chainsaw/plugins. Я также поставил «mysql-connector-java-5.1.16-bin» в каталог .chainsaw, чтобы быть уверенным, так как казалось, что это было причиной проблемы. Однако это не исправило.

Кто-нибудь из вас, ребята, знает, как подключить бензопилу к базе данных MySql?

Спасибо!

ответ

3

А подробнее о том, как использовать банки, которые не распределены с бензопилой:

http://logging.apache.org/chainsaw/distributionnotes.html

Кстати, вы можете попробовать последний снимок разработчика бензопилы, доступна здесь:

http://people.apache.org/~sdeboy

Множество новых функций ...

Скотт

+0

Спасибо! Я загрузил последнюю версию, и я рад, что есть примеры файлов конфигурации. Однако, когда я пытаюсь извлечь данные из моей базы данных, у меня есть ошибка «Нет подходящего драйвера для jdbc: mysql». Я отредактировал свой пост, если вы не против взглянуть на него :) – Mathieu

+1

Похоже, я не поместил свой «mysql-connector-java-5.1.16-bin» в нужное место. Я поместил его в свой путь java/jre/lib/ext, и он прекратил жаловаться. Тем не менее, он говорит мне, что «java.sql.SQLException: столбец« NDC «не найден» при выполнении моего запроса. Требуется ли в нашей базе данных колонка NDC? – Mathieu

+0

JavaDoc для CustomSQLDBReceiver говорит о том, чтобы определить столбцы в выражении SQL для «LOGGER, TIMESTAMP, LEVEL, THREAD, MESSAGE, NDC, MDC, CLASS, METHOD, FILE, LINE, PROPERTIES, THROWABLE», и если у вас нет одного или больше этих столбцов, просто добавьте «как НДЦ к вашему оператору SQL», чтобы пустая строка была в «наборе результатов», даже если у вас нет этого столбца в вашей базе данных. – Scott

0

Вот как настроить Chainsaw 2.1 для чтения журналов журнала, сохраненных с использованием DBAppender.

  1. Не загружать плагины
  2. Скачать драйвер SQL (например, mysql-connector-java-5.1.36-bin.jar) и сохранить его в <chainsaw>\repo.
  3. Редактируйте сценарий запуска, чтобы добавить банку в путь к классам. Например, в chainsaw.bat использования:

    множества CLASSPATH = "% BASEDIR% \" и т.д.; "% РЕПО%" \ log4j \ апаша-log4j-дополнения \ 1.1 \ апаша-log4j-Extras-1.1.jar; "% REPO% "\ log4j \ log4j \ 1.2.16 \ log4j-1.2.16.jar;" % REPO% "\ javax \ jmdns \ jmdns \ 3.4.1 \ jmdns-3.4.1.jar;" % РЕПО% "\ XStream \ XStream \ 1.1.2 \ XSTREAM-1.1.2.jar; "%" РЕПО% \ Викисклада VFS \ Обще-VFS \ 1,0 \ Обще-VFS-1.0.jar; "% REPO%" \ Обще-каротаж \ Обще-каротаж \ 1.1.1 \ Обще-каротаж 1.1.1.jar; "% REPO%" \ ком \ JCraft \ JSch \ 0.1.42 \ JSch-0.1.42.jar; "% REPO%" \ log4j \ апач-бензопила \ 2.1.0-SNAPSHOT \ апач-бензопилой-2.1.0-SNAPSHOT.jar; "% REPO%" \ mysql-connector-java-5.1.36-bin.баночка

  4. При запуске выбрать "Использовать бензопилой конфигурационный файл"

Вот Logback DBAppender-совместимый файл конфигурации:

<log4j:configuration xmlns:log4j="http://jakarta.apache.org/log4j/"> 

    <plugin name="Logs" class="org.apache.log4j.db.CustomSQLDBReceiver"> 
     <param name="sql" 
       value=" 
        SELECT 
         logger_name AS 'LOGGER', 
         from_unixtime (timestmp/1000) AS 'TIMESTAMP', 
         level_string AS 'LEVEL', 
         thread_name AS 'THREAD', 
         formatted_message AS 'MESSAGE', 
         (SELECT CONCAT('{{', group_concat(CONCAT(mapped_key, ',', mapped_value) SEPARATOR ','), '}}') 
          FROM logging_event_property 
          WHERE logging_event.event_id = logging_event_property.event_id 
          GROUP BY logging_event_property.event_id) AS 'NDC', 
         '' AS 'MDC', 
         caller_class AS 'CLASS', 
         caller_method AS 'METHOD', 
         caller_filename AS 'FILE', 
         caller_line AS 'LINE', 
         CONCAT('{{application,test,hostname,', (SELECT mapped_value FROM logging_event_property WHERE logging_event.event_id = logging_event_property.event_id AND mapped_key = 'HOSTNAME'), ',log4jid,', event_id,'}}') AS 'PROPERTIES', 
         IFNULL((SELECT group_concat(trace_line ORDER BY i ASC SEPARATOR '\n') 
          FROM logging_event_exception 
          WHERE logging_event.event_id = logging_event_exception.event_id 
          GROUP BY logging_event_exception.event_id),'') AS 'THROWABLE' 
        FROM logging_event 
        WHERE 1=1"/> 
     <connectionSource class="org.apache.log4j.db.DriverManagerConnectionSource"> 
      <param name="driverClass" value="<driver, eg com.mysql.jdbc.Driver>"/> 
      <param name="url" value="jdbc:mysql://<url>/<schema>"/> 
      <param name="user" value="<user>"/> 
      <param name="password" value="<password>"/> 
     </connectionSource> 
     <param name="IDField" value="event_id"/> 
     <param name="refreshMillis" value="3000"/> 
    </plugin> 

    <root> 
     <level value="debug"/> 
    </root> 

</log4j:configuration> 

Выбрать, в-выберите и в where 1=1 существуют проблемы, связанные с поведением CustomSQLDBReceiver неуклюже конкатенации WHERE event_id > -1 или AND event_id > -1 в конце выражения SQL. (See lines 306-313.)

Документация для CustomSQLDBReceiver находится в its javadoc.

Для Logback-Access (на EC2 с УДР) я использую:

<plugin name="Access-Logs" class="org.apache.log4j.db.CustomSQLDBReceiver"> 
    <param name="sql" 
      value=" 
       SELECT 
        REPLACE (requestURI, '/', '.') AS 'LOGGER', 
        from_unixtime (timestmp/1000) AS 'TIMESTAMP', 
        'INFO' AS 'LEVEL', 
        IFNULL((SELECT header_value FROM access_event_header WHERE access_event.event_id = access_event_header.event_id AND header_key = 'x-forwarded-for'),'') AS 'THREAD', 
        requestURL AS 'MESSAGE', 
        '' AS 'NDC', 
        '' AS 'MDC', 
        '' AS 'CLASS', 
        '' AS 'METHOD', 
        '' AS 'FILE', 
        '' AS 'LINE', 
        CONCAT('{{application,test,hostname,access,log4jid,', event_id,'}}') AS 'PROPERTIES', 
        (SELECT group_concat(concat(header_key, ': ', header_value) SEPARATOR '\n') 
         FROM access_event_header 
         WHERE access_event.event_id = access_event_header.event_id 
         GROUP BY access_event_header.event_id) AS 'THROWABLE' 
       FROM access_event 
       WHERE (SELECT header_value 
         FROM access_event_header 
         WHERE access_event.event_id = access_event_header.event_id AND header_key = 'user-agent') 
        != 'ELB-HealthChecker/1.0'"/> 
    <connectionSource class="org.apache.log4j.db.DriverManagerConnectionSource"> 
     <param name="driverClass" value="com.mysql.jdbc.Driver"/> 
     <param name="url" value=""/> 
     <param name="user" value=""/> 
     <param name="password" value=""/> 
    </connectionSource> 
    <param name="IDField" value="access_event.event_id"/> 
    <param name="refreshMillis" value="3000"/> 
</plugin> 
Смежные вопросы