0

私が持っているかなり奇妙な問題。

データベース作業を行うために、10分ごとに小さなJavaアプリケーションを実行しています。そのアクティビティをファイルに記録します。これは、ログ ファイルの 4 つの個別のコピーが不可解に作成される cron ジョブとして実行される場合を除いて、完全にうまく機能します。a.log、a.log0、a.log1、a.log2。

ファイルにロックがあるときにこれが行われることは理解していますが、これが当てはまる理由、特にcronでのみ発生する理由は考えられません。

正しいファイルを含む 4 つのファイルすべてにログ情報を書き込むことができるのに、なぜ余分な 3 つのファイルを作成するのでしょうか?

アプリケーションの寿命が来たら FileHandlers を閉じるので、そうではありません。セットアップは簡単です:

    rootLogger = LogManager.getLogManager().getLogger("");

    //remove current handlers
    for (Handler h : rootLogger.getHandlers()){
        rootLogger.removeHandler(h);
    }

    Handler infohandler    = new FileHandler ("/dir/info.log",  true);
    Handler errorhandler   = new FileHandler ("/dir/error.log", true);

    Formatter format = new CustomFormatter();
    infohandler .setFormatter(format); 
    errorhandler.setFormatter(format);

    infohandler .setLevel(Level.INFO);
    errorhandler.setLevel(Level.WARNING);

    rootLogger.addHandler(infohandler);
    rootLogger.addHandler(errorhandler);

と:

infohandler.close(); errorhandler.close();

現時点では、次のように関数を 1 回だけ呼び出しています。

rootLogger.log(Level.INFO, "Log this");

cron ジョブは非常に単純です。

*/10 * * * * root /usr/bin/java -jar /dir/db_clean.jar

何か案は?これは私を困惑させています。

パーミッションはすべて -rw-r--r-- であり、root が所有しています。

4

1 に答える 1

0

これは関連しているように見えます: http://developer.classpath.org/doc/java/util/logging/FileHandler-source.html

最初のコメントでは、最後に指摘されていることの 1 つは、指定されたパターンの結果を説明しており、説明したように 3 つのファイルを作成します。おそらく、その理由を知ることは、修正方法の答えにつながります。

于 2012-05-01T12:45:31.557 に答える