我有一个带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)
有谁知道为什么会这样?
答案 0 :(得分: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;
}
}