0

Javaを使用したAppEngineアプリケーションがあります。JUL(java.util.logging)を使用してサーバー側のログをログに記録しています。ファサード呼び出しCustomLoggerを作成しています。この呼び出しでは、ファクトリを使用してコンストラクターにJULロガーを作成します。

@Inject
public CustomLogger( EmailLoggingHandler handler ){
    this.logger = Logger.getLogger( "ServerLogger" );
    logger.addHandler( handler );
}

CustomLoggerのインスタンスはeagerSingletonとしてバインドされます。つまり、Guiceインスタンスごとにこのクラスのインスタンスが1つだけインスタンス化されます。eagerSingletonとして依存関係ツリーの一部でもあるカスタムロガー(EmailLoggingHandler)を挿入するまで、すべてが機能していました。

   @Inject
    public EmailLoggingHandler( SendEmailHelper emailHelper ){
        this.emailHelper = emailHelper;
        setLevel(Level.SEVERE);
    }

私が得ているエラー:

Error injecting constructor, java.security.AccessControlException: access denied (java.util.logging.LoggingPermission control)  

なぜこれが起こっているのか誰かが知っていますか?

4

1 に答える 1

1

ハンドラーをAppEngineのJULにフックしようとしたときにも同じ問題が発生しました。setLevel()私はそれを解決するために、自分のレベル変数への呼び出しを避け、それを使用しました。

public class MyHandler extends Handler {

    private Level logLevel = Level.INFO;

    @Override
    public void publish(final LogRecord record) {
        if (record.getLevel().intValue() >= logLevel.intValue())
            // ...
    }

    ...

    public void setLogLevel(final Level lvl) {
        logLevel = Level.FINE;
    }
}
于 2012-01-24T17:08:06.763 に答える