1

企業全体のロギング ソリューションを実装する予定です。これは、すべての例外を受け取り、その例外に関する詳細をどこかのデータベースに書き込む Web サービスになります。そうすれば、各アプリケーションのすべてのログ情報を一元化された場所に記録して、アプリケーションの監視を少し簡単にすることができます。ロギング監視フロントエンド アプリケーションも使用します (チェーンソーの可能性が高いですが、Web フロントエンドを探していますが、余談です)...

ここで初歩的な質問がいくつかあります。すべてのドキュメントを読んで、何かをログに記録しようとしているときは、次のようにします...

import org.apache.log4j.Logger;
import org.apache.log4j.PropertyConfigurator;

public class Log4jJDBCExample
{
    static Logger log = Logger.getLogger(Log4jJDBCExample.class);

    public static void main(String[] args)
    {
        PropertyConfigurator.configure("log4j.properties");

        log.debug("Sample debug message");
        log.info("Sample info message");
        log.error("Sample error message");
        log.fatal("Sample fatal message");
    }
}

明らかに log4j.properties ファイルが必要です。そうしないと、うまくいきません。だから私はこれをするだろう...

# Define the root logger with file appender
log4j.rootLogger = DEBUG, sql

# Define the file appender
log4j.appender.sql=org.apache.log4j.jdbc.JDBCAppender
log4j.appender.sql.URL=jdbc:mysql://localhost/test
# Set Database Driver
log4j.appender.sql.driver=com.mysql.jdbc.Driver
# Set database user name and password
log4j.appender.sql.user=root
log4j.appender.sql.password=password
# Set the SQL statement to be executed.
log4j.appender.sql.sql=INSERT INTO LOGS VALUES ('%x', now() ,'%C','%p','%m')
# Define the xml layout for file appender
log4j.appender.sql.layout=org.apache.log4j.PatternLayout

私は基本的にこのサイトからこのコードを引っ張っているだけです.... ここにリンクの説明を入力してください(誰かがそれをチェックしたい場合、これはかなり明確なチュートリアルです)。

これは素晴らしいことです。しかし、これは実装が Web サービスの背後にあることになります。ユーザーにクラス タイプとエラー (情報など) メッセージを Web ペイロードの一部として文字列として送信してもらいます。また、ユーザー名、スタック トレース (存在する場合)、およびアプリケーション ID も記録したいと考えています。また、データベースに書き込もうとする Web サービス ペイロードの一部でもあります。

明らかに、ここで少し拡張する必要があります。上記の例では、作成者はテーブルを作成しました

CREATE TABLE LOGS
(
USER_ID VARCHAR(20) NOT NULL,
DATED   DATETIME NOT NULL,
LOGGER  VARCHAR(50) NOT NULL,
LEVEL   VARCHAR(10) NOT NULL,
MESSAGE VARCHAR(1000) NOT NULL
);

私はそのテーブルを少し変更します。そのテーブルに ClassName、ApplicationID、および StackTrace を追加する必要があります。したがって、これは私のニーズにもう少し適しています。

CREATE TABLE LOGS
(
USER_ID VARCHAR2(20) NOT NULL,
DATED   DATETIME NOT NULL,
LOGGER  VARCHAR2(50) NOT NULL,
LEVEL   VARCHAR2(10) NOT NULL,
MESSAGE VARCHAR2(1000) NOT NULL,
    CLASSNAME VARCHAR2(100) NOT NULL,
    ApplicationID INT NOT NULL,
    STACKTRACE VARCHAR2(4000 BYTE)
);

アプリケーション名とその他の重要なアプリケーションの詳細を格納する AN アプリケーション テーブルとなる別のテーブルを作成します。スタック トレースは null 可能です。
明らかに、このステートメントを変更する必要があるため、残りの部分をログに記録します。

log4j.appender.sql.sql=INSERT INTO LOGS VALUES ('%x', now() ,'%C','%p','%m')

いくつかの質問:

1)これを行うためにlog4Jを拡張するのに必要なすべてについて、私は少し混乱しています。私は明らかに JDBCAppender とおそらくアペンダーを拡張する必要があります。だから私はそのすべての情報をキャプチャします。私はApacheのドキュメントを見てきましたが、何をすべきか、構成ファイルを介した構成またはクラスの拡張のどちらが進むべきかは明確ではありませんか?

2) オブジェクトの名前を getLogger Factory 関数に渡して、この機能がまだ機能することを期待できるかどうかについては、少し不明です。誰かが私のサービスを呼び出して、例外例外の原因となったクラスの名前を渡します。それがうまくいくかどうかはわかりません。ロガーで構築されたクラスは、クラスパスまたはJavaプロジェクトにある必要があると想定しています。これは、奇妙な例外をスローしないためですか? それは正しいですか?その場合、log4J がこのプロジェクトで使用するのに適したツールになるかどうかはわかりません。

3) noob Java プロジェクトの質問の種類。Log4J jar をプロジェクトにインポートすると、プロジェクトが突然ローカル サーバーに公開されなくなります。jar を外部 jar としてプロジェクトに追加しました。そのプロジェクトは公開されている EAR 内のユーティリティ jar です。そのプロジェクトはユーティリティ モジュールでもあります (そのプロジェクトのファセットとして追加されました)。私はおそらく愚かなことをしています。それが何であるかを私に厳しく教えてください。

4) これに適したフロントエンドをお勧めしますか? Chainsaw は Windows のシック クライアントのように思えますが、これは現在の目的には問題ありませんが、このプロジェクトには優れた Web フロントエンドが必要です。心当たりのある方は、お気軽にシェアしてください。

4

0 に答える 0