Вот как настроить Chainsaw 2.1 для чтения журналов журнала, сохраненных с использованием DBAppender.
- Не загружать плагины
- Скачать драйвер SQL (например,
mysql-connector-java-5.1.36-bin.jar
) и сохранить его в <chainsaw>\repo
.
- Редактируйте сценарий запуска, чтобы добавить банку в путь к классам. Например, в
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.баночка
- При запуске выбрать "Использовать бензопилой конфигурационный файл"
Вот 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>
Спасибо! Я загрузил последнюю версию, и я рад, что есть примеры файлов конфигурации. Однако, когда я пытаюсь извлечь данные из моей базы данных, у меня есть ошибка «Нет подходящего драйвера для jdbc: mysql». Я отредактировал свой пост, если вы не против взглянуть на него :) – Mathieu
Похоже, я не поместил свой «mysql-connector-java-5.1.16-bin» в нужное место. Я поместил его в свой путь java/jre/lib/ext, и он прекратил жаловаться. Тем не менее, он говорит мне, что «java.sql.SQLException: столбец« NDC «не найден» при выполнении моего запроса. Требуется ли в нашей базе данных колонка NDC? – Mathieu
JavaDoc для CustomSQLDBReceiver говорит о том, чтобы определить столбцы в выражении SQL для «LOGGER, TIMESTAMP, LEVEL, THREAD, MESSAGE, NDC, MDC, CLASS, METHOD, FILE, LINE, PROPERTIES, THROWABLE», и если у вас нет одного или больше этих столбцов, просто добавьте «как НДЦ к вашему оператору SQL», чтобы пустая строка была в «наборе результатов», даже если у вас нет этого столбца в вашей базе данных. – Scott