2016-06-17 4 views
0

私は、特定の期間内に指定された一連のエフェクトが発生したときに管理者に電子メールを送信するポートレットを開発しようとしています。私は自分のアペンダーを追加して、ロギングメカニズムを通るすべてのメッセージを処理できるように、ライフログにrootロガーを取得しようとしています。 私はソースコードを調べ、liferayがjava.util.logging.LogManagerを使用しているようです。私はサーバーが起動するときに起動するフックを作った。Liferay、ルートロガーの入手方法?

public void run(String[] ids) throws ActionException { 
    System.out.println("initializing");  

    LogListener listener = new LogListener(); 
    listener.setLevel(Level.ALL); 
    listener.setFilter(null); 
    Logger.getGlobal().addHandler(listener); 

    _log.debug("complete"); 
} 

そしてLogListenerクラス

package pl.com.mds.portlet.mailing.hook; 

import java.util.logging.Handler; 
import java.util.logging.LogRecord; 

public class LogListener extends Handler { 

    @Override 
    public void publish(LogRecord record) { 
     System.out.println("publishing******"); 

    } 

    @Override 
    public void flush() { 
     // TODO Auto-generated method stub 
     System.out.println("have to flush! *****"); 
    } 

    @Override 
    public void close() throws SecurityException { 
     // TODO Auto-generated method stub 
     System.out.println("close meee!"); 
    } 

} 

しかし、いくつかの例外がスローされたとき、私は、コンソールpublishing******唯一の例外スタックトレースに表示さカント:ここに私のrun()メソッドです。すべてのログをアプリケーションと受信に取得するにはどうすればよいですか? ありがとう:)

+0

それは変です。 Liferayのマニュアルには、[log4jを使用する](https://web.liferay.com/community/wiki/-/wiki/Main/How+to+configure+the+logs+in+Liferay/)が使用されています。 – jmehrens

答えて

1

ルートロガーは、標準的な手順Logger.getLogger( "logger name goes here")で取得できます。ルートロガーには名前として空の文字列があります。したがって、コードを次のように編集する必要があります。 Logger.getLogger("").addHandler(listener);

+0

あなたの解決策はうまくいきません。( –

+0

これは単純なJavaプログラムでテストされていますが、うまくいきます。コードを貼り付けてコピーして、動作させるために1行変更しました。 – Marat

0

LogFactoryUtilの使用を検討してください。次のように

private static final Log LOG = LogFactoryUtil.getLog(MyPortlet.class);