2017-10-25 18 views
0

Java.util.loggingのFileHandlerクラスを使用して循環ログを作成する。しかし、これらのログに.0拡張子が付加されている理由。 .1、.2、.3などは大丈夫ですが、私はファイルの拡張子として.0は必要ありません。なぜなら、それは顧客にとって混乱しているからです。どのように同じを達成するために? 私はJavaバージョンJavaバージョン "1.8.0_144"を使用しています。java.util.loggingのFileHandlerでロガーを使用する場合、.0拡張ログファイルは不要

FileHandler fileTxt = new FileHandler(pathOfLogFile+"_%g.log", 
       Integer.parseInt(prop.getProperty("MAX_LOG_FILE_SIZE")), 
       Integer.parseInt(prop.getProperty("NO_OF_LOG_FILES")), true); 
SimpleFormatter formatterTxt = new SimpleFormatter(); 
     fileTxt.setFormatter(formatterTxt); 
     logger.addHandler(fileTxt); 

ログファイル名はLOG_0.logです。要件は、最新のファイルに_0を持たないことです。単純にLOG.logにする必要があります。

+0

本当に悪いことに、あなた自身のハンドラを書くか、クライアントに混乱させておく必要があります。これは本当に心配する価値があると信じるのは難しいです。 – EJP

+0

非常に真です。私は彼らが以前のlog4Jユーザーだと思います。そのため、この柔軟性が必要です。私はもう一度何かを試すつもりです、そうでなければログファイルで0をダイジェストしなければなりません:)。 – Mahesh

答えて

0

FileHandlerの設定方法に関する詳細を追加する必要があります。コードとlogging.propertiesファイルを含めてください。

ほとんどの場合、開いているファイルハンドラは複数作成されており、次のファイルハンドラを作成する前に前のファイルハンドラを終了していない可能性があります。これは、コードのバグやFileHandlerを保持しているロガーへの強い参照を保持していないために発生します。この問題を作成する別の方法は、実行中の2つのJVMプロセスを作成することです。この場合、ファイル名に一意の番号が格納されている場所を選択するだけでは選択肢がありません。

ファイルパターンに%gトークンと%uを指定します。たとえば、%gfoo%u.logです。 FileHandler documentationパー

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

[省略]

通常のFileHandlerがファイル名を開こうとファイルを見つけた場合は一意のフィールドが、しかし0に設定されている「uは%が」それはユニークにインクリメントします別のプロセスによって現在使用されています番号フィールドを入力してもう一度お試しください。これはFileHandlerが現在使用されていないファイル名を見つけるまで繰り返されます。競合があり、 "%u"フィールドが指定されていない場合は、ファイル名の末尾にドットの後に追加されます。

したがって、3つのプロセスがすべてfred%u。%g.txtにログを記録しようとすると、fred0.0.txt、fred1.0を使用して終了する可能性があります。 txt、fred2.0.txtを回転シーケンスで最初のファイルとして出力します。

あなたが最初のファイルからのゼロを削除する場合のみ、ボックスの動作のうちの最良の近似をするようにコードを修正するために、次のようになります。使用後、何LOG_0.logファイルが存在しない場合

  1. File.renameを使用してファイルにゼロを追加します。これにより、LOG.log - >LOG_0.logが変更されます。
  2. Trigger a rotationLOG_0.log - >LOG_1.logなどとなります。LOG_N.log - >LOG_0.log
  3. ファイルからゼロを削除するには、File.renameを使用します。 LOG_0.log - >LOG.log
  4. ファイルハンドラをログの数を1つとして追加し、追加しないでください。これにより、最も古いログファイルが消去され、新しい現在のログファイルが開始されます。

この問題は、1回の実行中にコードがファイルサイズに基づいて回転しないことが原因で発生します。

+0

返事ありがとうございます。質問を編集し、コードスニペットも追加しました。私は作成した最新のログファイルで0にしたくないだけです。 FileHandlerのconfigureメソッドはprivateであり、実装をオーバーライドしようとすると他の多くの依存関係が発生しました。より良い方法がある場合に備えて、お勧めします。 – Mahesh

+0

@Mahesh私は参照してください。答えを更新しましたが、おそらく 'EJP'のアドバイスに従わなければなりません。 – jmehrens

+0

確かに、ありがとう.. – Mahesh

関連する問題