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 для получения дополнительной информации об этом.