2

log4j ビューアー (Chainsaw) を使用して、log4j によって MySql データベースに記録されたエラー ログを読みたいと考えています。ドキュメントが本当にまばらなので、少し苦労しています。

[strike]Chainsaw の暫定的な .xml 構成は次のとおりです:[/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 ディレクトリに入れました。これが問題の原因であると思われたためです。しかし、それは修正されませんでした。

Chainsaw を MySql データベースに接続する方法を知っている人はいますか?

ありがとう!

4

2 に答える 2

3

Chainsaw で配布されていない jar の使用方法に関する詳細情報:

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

ところで、Chainsaw の最新の開発者スナップショットを試してみることをお勧めします。こちらから入手できます。

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

たくさんの新機能...

スコット

于 2011-06-04T05:08:12.530 に答える
1

DBAppenderを使用して保存された Logback ログを読み取るようにChainsaw 2.1を構成する方法を次に示します。

  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;"%REPO%"\xstream\xstream\1.1.2\xstream-1.1 .2.jar;"%REPO%"\commons-vfs\commons-vfs\1.0\commons-vfs-1.0.jar;"%REPO%"\commons-logging\commons-logging\1.1.1\commons-logging -1.1.1.jar;"%REPO%"\com\jcraft\jsch\0.1.42\jsch-0.1.42.jar;"%REPO%"\log4j\apache-chainsaw\2.1.0-SNAPSHOT\apache -chainsaw-2.1.0-SNAPSHOT.jar; "%REPO%"\mysql-connector-java-5.1.36-bin.jar

  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>

select-in-select と theは、SQL 式の最後にaまたは anをwhere 1=1ぎこちなく連結する CustomSQLDBReceiver の動作を回避するために存在します。( 306 ~ 313 行を参照してください。 )WHERE event_id > -1AND event_id > -1

のドキュメントCustomSQLDBReceiverjavadocにあります。

Logback-Access (ELB を使用する 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>
于 2015-08-30T08:28:46.147 に答える