log4j - Вход в базу данных
API log4j предоставляет org.apache.log4j.jdbc.JDBCAppender объект, который может помещать информацию журнала в указанную базу данных.
Конфигурация JDBCAppender
Свойство | Описание |
---|---|
размер буфера | Устанавливает размер буфера. Размер по умолчанию - 1. |
Водитель | Устанавливает класс драйвера в указанную строку. Если класс драйвера не указан, по умолчанию используетсяsun.jdbc.odbc.JdbcOdbcDriver. |
макет | Устанавливает используемый макет. Макет по умолчаниюorg.apache.log4j.PatternLayout. |
пароль | Устанавливает пароль базы данных. |
sql | Задает инструкцию SQL, которая будет выполняться каждый раз при возникновении события регистрации. Это может быть INSERT, UPDATE или DELETE. |
URL | Устанавливает URL-адрес JDBC. |
пользователь | Устанавливает имя пользователя базы данных. |
Конфигурация таблицы журналов
Прежде чем вы начнете использовать ведение журнала на основе JDBC, вы должны создать таблицу для хранения всей информации журнала. Ниже приводится инструкция SQL для создания таблицы LOGS.
CREATE TABLE LOGS
(USER_ID VARCHAR(20) NOT NULL,
DATED DATE NOT NULL,
LOGGER VARCHAR(50) NOT NULL,
LEVEL VARCHAR(10) NOT NULL,
MESSAGE VARCHAR(1000) NOT NULL
);
Пример файла конфигурации
Ниже приведен пример файла конфигурации. log4j.properties для JDBCAppender, который будет использоваться для записи сообщений в таблицу LOGS.
# Define the root logger with appender file
log4j.rootLogger = DEBUG, DB
# Define the DB appender
log4j.appender.DB=org.apache.log4j.jdbc.JDBCAppender
# Set JDBC URL
log4j.appender.DB.URL=jdbc:mysql://localhost/DBNAME
# Set Database Driver
log4j.appender.DB.driver=com.mysql.jdbc.Driver
# Set database user name and password
log4j.appender.DB.user=user_name
log4j.appender.DB.password=password
# Set the SQL statement to be executed.
log4j.appender.DB.sql=INSERT INTO LOGS VALUES('%x','%d','%C','%p','%m')
# Define the layout for file appender
log4j.appender.DB.layout=org.apache.log4j.PatternLayout
Для базы данных MySQL вам нужно будет использовать фактическое имя DBNAME, идентификатор пользователя и пароль, в которых вы создали таблицу LOGS. Оператор SQL предназначен для выполнения оператора INSERT с именем таблицы LOGS и значениями, которые должны быть введены в таблицу.
JDBCAppender не требует явного определения макета. Вместо этого переданный ему оператор SQL использует PatternLayout.
Если вы хотите иметь файл конфигурации XML, эквивалентный приведенному выше log4j.properties файл, то вот содержимое -
<?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:mysql://localhost/DBNAME"/>
<param name="driver" value="com.mysql.jdbc.Driver"/>
<param name="user" value="user_id"/>
<param name="password" value="password"/>
<param name="sql" value="INSERT INTO LOGS VALUES('%x','%d','%C','%p','%m')"/>
<layout class="org.apache.log4j.PatternLayout">
</layout>
</appender>
<logger name="log4j.rootLogger" additivity="false">
<level value="DEBUG"/>
<appender-ref ref="DB"/>
</logger>
</log4j:configuration>
Пример программы
Следующий класс Java представляет собой очень простой пример, который инициализирует, а затем использует библиотеку ведения журнала Log4J для приложений Java.
import org.apache.log4j.Logger;
import java.sql.*;
import java.io.*;
import java.util.*;
public class log4jExample{
/* Get actual class name to be printed on */
static Logger log = Logger.getLogger(log4jExample.class.getName());
public static void main(String[] args)throws IOException,SQLException{
log.debug("Debug");
log.info("Info");
}
}
Скомпилировать и выполнить
Вот шаги для компиляции и запуска вышеупомянутой программы. Убедитесь, что вы установилиPATH и CLASSPATH надлежащим образом, прежде чем приступить к компиляции и выполнению.
Все библиотеки должны быть доступны в CLASSPATHи ваш файл log4j.properties должен быть доступен в PATH. Следуйте данным шагам -
- Создайте log4j.properties, как показано выше.
- Создайте log4jExample.java, как показано выше, и скомпилируйте его.
- Запустите двоичный файл log4jExample, чтобы запустить программу.
Теперь проверьте свою таблицу LOGS в базе данных DBNAME, и вы найдете следующие записи:
mysql > select * from LOGS;
+---------+------------+--------------+-------+---------+
| USER_ID | DATED | LOGGER | LEVEL | MESSAGE |
+---------+------------+--------------+-------+---------+
| | 2010-05-13 | log4jExample | DEBUG | Debug |
| | 2010-05-13 | log4jExample | INFO | Info |
+---------+------------+--------------+-------+---------+
2 rows in set (0.00 sec)
Note- Здесь x используется для вывода вложенного диагностического контекста (NDC), связанного с потоком, который сгенерировал событие регистрации. Мы используем NDC, чтобы различать клиентов в серверных компонентах, обслуживающих несколько клиентов. Обратитесь к Руководству по Log4J для получения дополнительной информации.