Подключение программы просмотра Log4J (бензопила) к базе данных MySql - PullRequest
2 голосов
/ 03 июня 2011

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

[strike] Вот моя предварительная конфигурация .xml для Chainsaw: [/ strike] Вот моя новая конфигурация .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>

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

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

Спасибо!

Ответы [ 2 ]

3 голосов
/ 04 июня 2011

И дополнительная информация о том, как использовать банки, которые не распространяются вместе с Chainsaw:

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

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

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

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

Scott

1 голос
/ 30 августа 2015

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

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

    set CLASSPATH = "% BASEDIR%" \ etc; "% REPO%" \ log4j \ apache-log4j-extras \ 1.1 \ apache-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;" % REPO% "\ Викисклада VFS \ Викисклада VFS \ 1,0 \ Обще-VFS-1.0.jar;" % REPO% "\ свободного городского-logging \ Обще-каротаж \ 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-разъем-Java-5.1.36-bin.jar

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

Вот файл конфигурации, совместимый с 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>

Select-in-select и where 1=1 предназначены для обхода поведения CustomSQLDBReceiver, связанного с неуклюжей конкатенацией WHERE event_id > -1 или AND event_id > -1 в конце выражения SQL.( См. Строки 306-313. )

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

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

<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>
...