log4j-データベースへのログイン

log4j APIは、 org.apache.log4j.jdbc.JDBCAppender 指定されたデータベースにログ情報を配置できるオブジェクト。

JDBCAppender構成

プロパティ 説明
バッファサイズ バッファサイズを設定します。デフォルトのサイズは1です。
運転者 ドライバークラスを指定された文字列に設定します。ドライバークラスが指定されていない場合、デフォルトでsun.jdbc.odbc.JdbcOdbcDriver
レイアウト 使用するレイアウトを設定します。デフォルトのレイアウトはorg.apache.log4j.PatternLayout
パスワード データベースのパスワードを設定します。
sql ロギングイベントが発生するたびに実行されるSQLステートメントを指定します。これは、INSERT、UPDATE、またはDELETEである可能性があります。
URL JDBCURLを設定します。
ユーザー データベースのユーザー名を設定します。

ログテーブルの構成

JDBCベースのロギングの使用を開始する前に、すべてのログ情報を維持するためのテーブルを作成する必要があります。以下は、LOGSテーブルを作成するためのSQLステートメントです。

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 メッセージをLOGSテーブルに記録するために使用されるJDBCAppenderの場合。

# 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データベースの場合、LOGSテーブルを作成した実際のDBNAME、ユーザーID、およびパスワードを使用する必要があります。SQLステートメントは、テーブル名LOGSおよびテーブルに入力される値を使用してINSERTステートメントを実行することです。

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クラスは、Javaアプリケーション用にLog4Jロギングライブラリを初期化して使用する非常に単純な例です。

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バイナリを実行してプログラムを実行します。

ここで、DBNAMEデータベース内のLOGSテーブルを確認すると、次のエントリが見つかります-

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マニュアルを確認してください。