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.