GAE上的伯克利数据库

时间:2015-02-06 18:34:12

标签: java google-app-engine logging berkeley-db

我正在尝试在GAE上使用Berkely DB,除了日志记录外,一切正常。这是代码段

EnvironmentConfig envConfig = new EnvironmentConfig();
        envConfig.setAllowCreate(allowCreateNew);
        envConfig.setConfigParam(EnvironmentConfig.FILE_LOGGING_LEVEL, "OFF");
        envConfig.setConfigParam(EnvironmentConfig.CONSOLE_LOGGING_LEVEL, "OFF");
        envConfig.setLoggingHandler(null);
        envConfig.setReadOnly(isReadOnly);
        envConfig.setTransactional(false);
        if (cacheSize != null)
            envConfig.setCacheSize(cacheSize);
        env = new Environment(dbPath, envConfig);

可以看出我已禁用日志记录,GAE上的logging.properties文件是

.level = WARNING
handlers = java.util.logging.ConsoleHandler
java.util.logging.ConsoleHandler.level=OFF
java.util.logging.ConsoleHandler.formatter = java.util.logging.SimpleFormatter

# Set the default logging level for ORM, specifically, to WARNING
DataNucleus.JDO.level=WARNING
DataNucleus.Persistence.level=WARNING
DataNucleus.Cache.level=WARNING
DataNucleus.MetaData.level=WARNING
DataNucleus.General.level=WARNING
DataNucleus.Utility.level=WARNING
DataNucleus.Transaction.level=WARNING
DataNucleus.Datastore.level=WARNING
DataNucleus.ClassLoading.level=WARNING
DataNucleus.Plugin.level=WARNING
DataNucleus.ValueGeneration.level=WARNING
DataNucleus.Enhancer.level=WARNING
DataNucleus.SchemaTool.level=WARNING
java.sql.level=WARNING

我跟踪了stackoverflow中其他人给出的所有指针,但我仍然得到了

java.lang.NoClassDefFoundError: java.util.logging.ConsoleHandler is a restricted class. Please see the Google  App Engine developer's guide for more details.
    at 

    com.google.appengine.tools.development.agent.runtime.Runtime.reject(Runtime.java:51)
        at com.sleepycat.je.utilint.ConsoleRedirectHandler.<init>(ConsoleRedirectHandler.java:26)
        at com.sleepycat.je.utilint.LoggerUtils.getLogger(LoggerUtils.java:198)
        at com.sleepycat.je.dbi.StartupTracker.<init>(StartupTracker.java:151)
        at com.sleepycat.je.dbi.EnvironmentImpl.<init>(EnvironmentImpl.java:437)
        at com.sleepycat.je.dbi.EnvironmentImpl.<init>(EnvironmentImpl.java:410)
        at com.sleepycat.je.dbi.DbEnvPool.getEnvironment(DbEnvPool.java:178)
        at com.sleepycat.je.Environment.makeEnvironmentImpl(Environment.java:251)
        at com.sleepycat.je.Environment.<init>(Environment.java:232)
        at com.sleepycat.je.Environment.<init>(Environment.java:176)

有关如何禁用Berkley DB日志记录的任何指示都将受到高度赞赏!

1 个答案:

答案 0 :(得分:1)

看起来像com.sleepycat.je.utilint.LoggerUtils。getLogger方法总是尝试在根记录器上安装处理程序(如果它们不存在)。具体来说,它正在尝试安装:

  1. java.util.logging.ConsoleHandler
  2. com.sleepycat.je.utilint.ConsoleRedirectHandler
  3. com.sleepycat.je.utilint.FileRedirectHandler
  4. com.sleepycat.je.utilint.ConfiguredRedirectHandler
  5. 更改日志记录配置不会阻止代码尝试执行此操作。

    似乎应修补com.sleepycat.je.utilint.LoggerUtils以处理addHandlers抛出的SecurityException和NoClassDefFoundError以扩展受限类的类。