2017-09-19 2 views
0

私は昨日からいくつかのことで戦っています。JAVA LOGGINのファイルapp.log.Xの増分を避けて制御する方法

javaでWebアプリケーション(WAR)をログに記録します。

ログを作成し、FileHandlerを追加してログメッセージを送信します。しかし、私たち全員が知っているように、ファイルハンドラは、fush()とclose()を呼び出すまで、新しいファイルをロックしていますので、戦争を再デプロイするときです。 app)では、デプロイメントごとに1つのファイルが作成されます(醜い)。

私はこのような行為を避けようとしていました。(これはパフォーマンスの点でこのように行われているかどうかはわかりませんが、毎回ファイルを開くとクローズするのは時間がかかります。ロガーがメッセージを記録するたびにハンドラとフラッシュ/閉じる。 (だから私は1つだけのファイルを持っている)。

しかし、私はこれを行う方法はありません。私はjava.util.Loggerクラスを拡張しようとしており、とても難しいです。

このような状況にどう対応できるかについての手掛かりがありますか?

ありがとうございます!

public class LogUtil { 

public static String name = "app%g.log"; 

public static Logger obtenerLogger(String eid, String path, Level levelToLog) { 
    Logger logger = Logger.getLogger(eid); 
    if (levelToLog != null) { 
     logger.setLevel(levelToLog); 
    } 

    //I create the folder if not exist 
    File dirFile = new File(path); 
    if (!dirFile.exists()) { 
     dirFile.mkdirs(); 
    } 

    //I remove the handlers and close after each logg call (doing this i can use the same file lof after log) 
    for (Handler handler : logger.getHandlers()) { 
     logger.removeHandler(handler); 
     handler.close(); 
     handler.flush(); 
    } 

    //I Create the FileHandler 
    FileHandler f; 
    try { 
     f = new FileHandler(
       path + name, //pattern 
       10485760, //limit 
       3, // count 
       true); //append 
     //f.setFormatter(new SimpleFormatter()); 
     f.setFormatter(new MyFormatter()); 
     f.setLevel(levelToLog); 
    } catch (Exception ex) { 
     return null; 
    } 

    logger.addHandler(new ConsoleHandler()); 
    logger.addHandler(f); 

    return logger; 
} 

PD1:しかし、戦争の再デプロイ時に、私はそれが新しいロガーを作成し、ロガークラスを呼び出しますが、最後のものはunclose続けます。そして、それは

+0

あなたのロガーセットアップ/設定を投稿してください – pleft

答えて

0

ログを作成し、FileHandlerを追加してログメッセージを送信します。しかし、私たち全員が知っているように、ファイルハンドラは、fush()とclose()を呼び出すまで、新しいファイルをロックしていますので、戦争を再デプロイするときです。 app)では、デプロイメントごとに1つのファイルが作成されます(醜い)。

ログツールツリーとハンドラをプログラムで設定する場合は、カスタムServletContextListenerを実装し、それをWebアプリケーションに登録する必要があります。ここにはexampleがあります。

また、you are holding a strong reference to your loggers

関連する問題