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 实例只会实例化此类的一个实例。一切正常,直到我注入自定义记录器(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)  

有谁知道为什么会这样?

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 回答