【问题标题】:berkeley DB on GAEGAE 上的伯克利数据库
【发布时间】:2015-02-06 18:34:11
【问题描述】:

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

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 禁用日志记录的指针将不胜感激!

【问题讨论】:

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


    【解决方案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

    更改日志记录配置不会阻止代码尝试执行此操作。

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

    【讨论】:

    • 是的,我确实得到了 sleepy cat 的源代码并从中删除了所有记录器,但是在跳过那个箍之后我遇到了 db 文件大小问题......所以放弃使用 sleepycat。跨度>
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-01-27
    • 1970-01-01
    相关资源
    最近更新 更多