3

最初の EclipseLink JPA プロジェクトに戻り、パフォーマンスに関するいくつかの問題に気付きました。状況は次のとおりです。

アプリケーションは、ローカルの Apache Derby DB で実行されます。EntityManager の作成中に、コンソールはいくつかの情報と警告をログに記録します。これには数秒かかりますが、今のところ問題ありません。ただし、コード全体を実行可能な jar にパッケージ化して Eclipse の外部で実行すると、プロセス全体にさらに時間がかかります。

そもそもこの問題の理由を見つけるのが賢明ですが、少なくとも進行状況を大まかに追跡するために ProgressBar を追加したかったのです。

EclipseLink wiki を調べたところ、すでに PerformanceMonitor といくつかのロギング ユーティリティが含まれていることがわかりました。私は今、1 と 1 を組み合わせるという一見単純な作業に行き詰まっています。

ProgressBar を EclipseLink に接続するにはどうすればよいですか? または別のアプローチ: そもそも EclipseLink の進行中のアクティビティをどのようにログに記録できますか?

どんな助けでも大歓迎です。

乾杯

4

3 に答える 3

3

EclipseLink JPAを持つSEプロジェクト(非アプリケーションサーバープロジェクト)のログファイルを作成する手順は次のとおりです。

  1. ファイル「persistence.xml」を開き、次のプロパティを割り当てます。

    プロパティname="eclipselink.logging.logger" value = "JavaLogger"

    プロパティname="eclipselink.logging.level" value = "FINEST"

  2. Eclipselink JavaLoggerは実際にはjava.util.loggingのものであるため、JDKフォルダーを参照して、次のように変更するファイルlogging.propertiesを見つけます。

handlers = java.util.logging.FileHandler、java.util.logging.ConsoleHandler

#デフォルトのグローバルログレベル。

.level = FINEST

#デフォルトのファイル出力はユーザーのホームディレクトリにあります

#java.util.logging.FileHandler.pattern =%h / java%u.log

#しかし、私はそれを次のように配線することを好みます:

java.util.logging.FileHandler.pattern = C \:/ SamLogFile.log

java.util.logging.FileHandler.level = FINER

java.util.logging.FileHandler.formatter = java.util.logging.SimpleFormatter

#私は個人的にstdoutロギングを気にしないので、オフにします。

java.util.logging.ConsoleHandler.level = OFF

java.util.logging.ConsoleHandler.formatter = java.util.logging.SimpleFormatter

java.util.logging.SimpleFormatter.format =%4 $ s:%5 $ s [%1 $ tc]%n

これで、以下をインポートすることにより、クラス内にログを配置できます。

import java.util.logging.Level;

import java.util.logging.Logger;

そして呼び出し:

public void yourMethod() { 

Logger.getLogger( YourClassName.class.getName() ).log( Level.INFO, "I am logging well......!" ); }

これで設定が完了しました。プロジェクトを実行/テストして、ログを読んで楽しんでください!

于 2012-11-01T15:53:13.147 に答える
3

2 つのファイル slf4j-api-1.7.1.jar とファイル slf4j-jdk14-1.7.1.jar をクラスパスに追加することで、ロギング コードをベスト プラクティスにすることもできます。これら 2 つのファイルは、 http://www.slf4j.org/download.htmlからダウンロードする必要があります。

クラスにインポートを追加します。

import org.slf4j.Logger;

import org.slf4j.LoggerFactory;

次に、メソッドに次の行を追加します。

LoggerFactory.getLogger(Mysafeperson.class.getName()).info("I am logging using the slf4j api");

このプラクティスでは、java.util.logging (JUL) API の代わりに slf4j API を使用してコードを作成しています。したがって、コードは JUL から分離され、任意のロギング フレームワークを slf4j 実装としてバインドする準備が整います (選択肢は logback - log4j - またはこのリンクを参照してください) 。

ここで推進しているアイデアは、 http://www.slf4j.org/legacy.htmlのドキュメントに基づいています。そう:

  • ファイル: slf4j-api-1.7.1 は、新しい API ファサードです。
  • ファイル: slf4j-jdk14-1.7.1 は、java.util.logging (JUL) である既存のロギング実装と、slf4j API を呼び出すアプリケーション コードからブリッジを作成します。

2 つのヒントが残っています。

  1. JUL で利用可能な定義されたレベルは次のとおりです。

    • SEVERE (最高値)
    • 警告
    • 情報
    • 設定
    • 大丈夫
    • より細かい
    • FINEST (最低値)

    したがって、slf4j API のレベル (エラー - トレース - デバッグ) を使用しないでください。ログ レベルはトリガーされません。INFO と WARN は使用しても問題ありません

  2. EclipseLink に関しては、JUL 構成ファイル logging.properties の使用にまだ縛られていることに注意してください。

于 2012-11-02T02:36:28.277 に答える
2

これをpersistence.xmlファイルの永続ユニットのプロパティに追加して、eclipselinkロギングを有効にする必要があります。

<property name="eclipselink.logging.level" value="DEBUG"/>

最も詳細なログを有効にするか、十分でない場合は「DEBUG」ではなく「ALL」を有効にします。ただし、本番環境に移行するときに削除してください。そうしないと、そのライン自体が遅くなります。

日食リンクを遅くする可能性のある2つの一般的なものは次のとおりです。

必要のないときにpersistence.xmlにこれを含める:

<property name="eclipselink.ddl-generation" value="create-tables"/>

そしてこれを持っていない(persistence.xmlファイルでdeクラスを宣言している場合。持っていない場合はfalseに設定してください!!):

<exclude-unlisted-classes>true</exclude-unlisted-classes>

プログレスバーの時点では、eclipselinkでさえ最初に処理するクラスの全量を知らないため、非常に難しく、正確ではないと思います。したがって、努力する価値はないと思いますが、良いですあなたがそれをする方法を見つけたら幸運。

于 2012-08-26T05:11:55.117 に答える