log4j - Veritabanında Oturum Açma

Log4j API, org.apache.log4j.jdbc.JDBCAppender nesne, günlük bilgilerini belirli bir veritabanına koyabilir.

JDBCAppender Yapılandırması

Emlak Açıklama
bufferSize Arabellek boyutunu ayarlar. Varsayılan boyut 1'dir.
sürücü Sürücü sınıfını belirtilen dizeye ayarlar. Sürücü sınıfı belirtilmezse, varsayılan olaraksun.jdbc.odbc.JdbcOdbcDriver.
Yerleşim Kullanılacak düzeni ayarlar. Varsayılan düzenorg.apache.log4j.PatternLayout.
parola Veritabanı şifresini ayarlar.
sql Her günlüğe kaydetme olayı gerçekleştiğinde yürütülecek SQL ifadesini belirtir. Bu INSERT, UPDATE veya DELETE olabilir.
URL JDBC URL'sini ayarlar.
kullanıcı Veritabanı kullanıcı adını ayarlar.

Günlük Tablo Yapılandırması

JDBC tabanlı günlük kaydını kullanmaya başlamadan önce, tüm günlük bilgilerini korumak için bir tablo oluşturmalısınız. LOGS tablosunu oluşturmak için SQL İfadesi aşağıdadır -

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
   );

Örnek Yapılandırma Dosyası

Aşağıda örnek bir yapılandırma dosyası verilmiştir log4j.properties Mesajları bir LOGS tablosuna kaydetmek için kullanılacak olan JDBCAppender için.

# 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 veritabanı için, LOGS tablosunu oluşturduğunuz gerçek DBNAME, kullanıcı kimliği ve parolayı kullanmanız gerekir. SQL deyimi, LOGS tablo adı ve tabloya girilecek değerlerle bir INSERT deyimi yürütmek içindir.

JDBCAppender'ın açıkça tanımlanması için bir düzene ihtiyacı yoktur. Bunun yerine, kendisine iletilen SQL ifadesi bir PatternLayout kullanır.

Yukarıdakine eşdeğer bir XML yapılandırma dosyasına sahip olmak istiyorsanız log4j.properties dosya, o zaman içerik burada -

<?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>

Örnek Program

Aşağıdaki Java sınıfı, Java uygulamaları için Log4J günlük kitaplığını başlatan ve daha sonra kullanan çok basit bir örnektir.

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");
   }
}

Derleyin ve Çalıştırın

İşte yukarıda bahsedilen programı derlemek ve çalıştırmak için adımlar. Ayarladığınızdan emin olunPATH ve CLASSPATH derleme ve yürütme için ilerlemeden önce uygun şekilde.

Tüm kütüphaneler şurada bulunmalıdır: CLASSPATHve log4j.properties dosyanız PATH içinde bulunmalıdır. Verilen adımları izleyin -

  • Yukarıda gösterildiği gibi log4j.properties oluşturun.
  • Log4jExample.java'yı yukarıda gösterildiği gibi oluşturun ve derleyin.
  • Programı çalıştırmak için log4jExample ikili dosyasını çalıştırın.

Şimdi DBNAME veritabanı içindeki LOGS tablonuzu kontrol edin ve aşağıdaki girişleri bulacaksınız -

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- Burada x, günlük olayını oluşturan iş parçacığı ile ilişkili Yuvalanmış Tanılama Bağlamını (NDC) çıkarmak için kullanılır. Birden çok istemciyi işleyen sunucu tarafı bileşenlerinde istemcileri ayırt etmek için NDC kullanıyoruz. Bununla ilgili daha fazla bilgi için Log4J Kılavuzu'na bakın.