2016-08-19 63 views
1

私は23時間毎に15分ごとに実行されるアプリケーションを持っています。たいていの場合、それは目を覚ますものであり、処理して閉じるデータがないことがわかります。初期化と入力データのチェック中に、DEBUGログステートメントがコンソールに書き込むだけです。アプリケーションが処理するデータを見つけたら、ログファイルには何も書き込まれません(INFOレベル以上)。問題は、「処理するデータがない」実行は空のログファイルを作成していることです。これは1日にほぼ100回点灯するので、この動作は望ましくありません。Log4jは必要な前に空のファイルを作成します

これらのファイルが不必要な場合は手動で削除する方法を簡単に実装できますが、これはハッキーです。 Log4jが何かが実際に書き込まれるまでログファイルの作成を待つようにする方法はありますか?ありがとう! log4j.propertiesの

関連部分:

log4j.appender.myFileLogger=org.apache.log4j.RollingFileAppender 
log4j.appender.myFileLogger.Append=false 
log4j.appender.myFileLogger.File=D:/Imaging/myApp/logs/myApp_${current.date}.log 
log4j.appender.myFileLogger.threshold=INFO 
log4j.appender.myFileLogger.layout=org.apache.log4j.PatternLayout 
log4j.appender.myFileLogger.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} %-5p %c{1}:%L - %m%n 
+0

あなたはHH削除することもできます:MM:あなたのファイル名からのSS部分を、毎日のログを持っていますか?私は、何も処理されていないことを知って、おそらく明示的にログに記録する価値があると思います。ああ、申し訳ありませんが、私は実際にあなたの質問への答えを持っていません。それは面白いです。 – dckuehn

+0

ローリング・デイリー・ログは元々の解決策でした。入力データとしての奇妙な設定が都合が良いときにいつでも配信されるので、いくつかの入力ファイルを一度に配信して順次処理することができます。それぞれの処理実行/入力ファイルごとに1つのログファイルを取得することを希望しましたが、いずれの方向にも問題はありません。この時点でほとんどの好奇心:) – jfaulk919

答えて

0

誰が今までこの遭遇した場合、ここで私は「解決」する方法です。この:

if(deleteLog) { 
    FileAppender appender = (FileAppender)Logger.getRootLogger().getAppender("myFileLogger"); 
    String path = appender.getFile(); 
    Logger.shutdown(); 
    Files.delete(Paths.get(path)); 
} 

これはまだ少しハック感じているが、それ余分な設定ポイントやハードコードされたファイルパスを必要とせずに動作します。 logger.shutdown()を呼び出すことを忘れないでください。そうしないと、Log4jはまだファイルにオープンハンドルを持ち、「別のプロセスはこのファイルを使用しています」というエラーをスローします。

バジルムーサの答えは、このための基礎を提供した:https://stackoverflow.com/a/9480213/5780475

関連する問題