Можно ли добавить обработчик в JUL на AppEngine? - PullRequest
0 голосов
/ 25 ноября 2011

У меня есть приложение AppEngine с Java.Я использую JUL (java.util.logging) для регистрации журналов на стороне сервера.Я создаю фасадный вызов CustomLogger, в котором он создает регистратор JUL в конструкторе, используя фабрику:

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

Экземпляр CustomLogger связывается как eagerSingleton, означая, что только один экземпляр этого класса будет когда-либо создаваться для Guiceпример.Все работало, пока я не внедрил пользовательский регистратор (EmailLoggingHandler), который также является частью дерева зависимостей как eagerSingleton.

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

Я получаю ошибку:

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

Есть ли у кого-нибудьЕсть идеи, почему это происходит?

1 Ответ

1 голос
/ 24 января 2012

У меня была такая же проблема, когда я пытался подключить свой обработчик в JUL на AppEngine. Я решил это, избегая любых вызовов 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;
    }
}
...