Учебники

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)

Примечание. Здесь x используется для вывода вложенного диагностического контекста (NDC), связанного с потоком, который сгенерировал событие регистрации. Мы используем NDC для различения клиентов в серверных компонентах, обрабатывающих несколько клиентов. Проверьте Log4J Manual для получения дополнительной информации об этом.