0

私はログのために JUL を使用しています (いいえ、変更できません)。パラメータを渡す単純なラッパーを開発しました。毎回正しい形式で FileHandler を作成するので、すべてのプロジェクトでログを再作成する必要はありません。

テスト アプリは意図したとおりに機能しますが、ライブラリを他のプロジェクトにインポートすると、1 つ (これまでのところ 1 つだけ) 固有のエラーが発生するようです: 毎回、ログ ファイルの末尾に ".0" が追加されます。 .

競合がなく、ファイルハンドラーが既存のファイルの最後に追加するように構成されている場合でも、これが行われます (これは問題ありません)。さまざまなファイル名で遊んできましたが、最近では単純な「mylog.log」を使用しており、ログファイルは引き続き「mylog.log.0」として出力されます。確認したところ、fileHandler に正しいファイル (「mylog.log」) が渡されていますが、そこにログが記録されていません。

これは、ログ テストでは発生せず、実際に使用したいプロジェクトでのみ発生します。まったく同じパラメーターを使用しても、異なるファイル名が取得されます。

私が見逃しているJULについての癖はありますか?コードはとてもシンプルです。関連コード:

String logFilePath = directory+name; // directory and name are method arguments
Handler newFileHandler;
File dirFile = new File(directory);
if(!dirFile.exists())
{
    dirFile.mkdirs();
}
newFileHandler = new FileHandler(logFilePath, true);
newFileHandler.setFormatter(myformatter);
//... etc
4

2 に答える 2

0

競合がない場合でもこれを行います....

それは証拠や仮定で証明されていますか? FileHandlerのドキュメントによると:

「%g」フィールドが指定されておらず、ファイル数が 1 より大きい場合、生成されたファイル名の末尾のドットの後に世代番号が追加されます。

競合があり、「%u」フィールドが指定されていない場合は、ファイル名の末尾のドットの後に追加されます。(これは、自動的に追加された世代番号の後になります。)

競合を回避するための一意の ID の使用は、ローカル ディスク ファイル システムを使用する場合にのみ確実に機能することが保証されていることに注意してください。

競合には、同じ場所に対して複数の FileHandler を開くことが含まれる場合があります。これらの各点を確認する必要があります。コードを追加してRuntimeMXBeanを取得し、単一のログ ステートメントを追加して、呼び出し元のClassLoader現在のスレッドランタイム名、および開始時刻を記録することが役立ちます。通常、ランタイム名はプロセス ID とホスト名にマップされます。プログラムを実行し、ファイルの内容を確認します。

含めたコードは役に立ちますが、アプリケーションの起動方法と logging.properties に含まれるものに関する詳細を含める必要があります。

于 2014-06-05T16:59:48.740 に答える
0

私は最終的にこれを理解し、原因を投稿するのを忘れました。

次の 2 つのことが機能していました。

  1. 私がいた環境が原因で、「ローリング」ロギングは、私が認識していなかったいくつかのバックグラウンド変数によってアクティブ化されていました。テストから実際の実装プロジェクトに移した後です。

  2. JUL は、その仕組みについて途方もなく柔軟性に欠けています。本当に私はそれについて十分に話すことができません。とにかく、簡単に言うと、ローリング ログが有効になっている場合、アクティブなログが ".0" で終わるように常にファイル番号が追加されます。通常、私は二次ログにのみ番号を持つAPIを使用しましたが、現在のログは指定した正確な名前を維持します.JULには名前を取得するための「現在のログファイルを取得する」方法がないため、これは問題を引き起こしまし.そのため、名前がどうあるべきかを予測する醜いメソッドを作成する必要がありましたパラメータに基づいて、何も問題がなかったことを願っています。余談ですが、世代番号の形式を変更することはできません (ファイル番号が 0,1,2,... ではなく 01, 02, ... 10, 11 であることが好まれたため、いくつかの問題が発生しました。 10)。

于 2015-04-23T01:32:12.803 に答える