Log4j-logging-database

提供:Dev Guides
移動先:案内検索

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

log4j APIは org.apache.log4j.jdbc.JDBCAppender オブジェクトを提供します。これにより、指定されたデータベースにロギング情報を配置できます。

JDBCAppenderの構成

Property Description
bufferSize Sets the buffer size. Default size is 1.
driver Sets the driver class to the specified string. If no driver class is specified, it defaults to sun.jdbc.odbc.JdbcOdbcDriver.
layout Sets the layout to be used. Default layout is org.apache.log4j.PatternLayout.
password Sets the database password.
sql Specifies the SQL statement to be executed every time a logging event occurs. This could be INSERT, UPDATE, or DELETE.
URL Sets the JDBC URL.
user Sets the database user name.

ログテーブルの構成

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

サンプル構成ファイル

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

JDBCAppenderでは、レイアウトを明示的に定義する必要はありません。 代わりに、渡されるSQLステートメントはPatternLayoutを使用します。

上記の log4j.properties ファイルと同等のXML構成ファイルが必要な場合、ここに内容があります-

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

コンパイルして実行

上記のプログラムをコンパイルして実行する手順は次のとおりです。 コンパイルと実行に進む前に、 PATHCLASSPATH が適切に設定されていることを確認してください。

すべてのライブラリが 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)

-ここでxは、ロギングイベントを生成したスレッドに関連付けられたネストされた診断コンテキスト(NDC)を出力するために使用されます。 NDCを使用して、複数のクライアントを処理するサーバー側コンポーネントのクライアントを区別します。 詳細については、Log4Jマニュアルを参照してください。