【问题标题】:hsqldb internal event log configurationhsqldb 内部事件日志配置
【发布时间】:2010-11-23 20:03:30
【问题描述】:

如何在 hsqldb 中配置内部事件监控?当我运行我的 Java 应用程序时,我收到以下警告:

log4j:WARN No appenders could be found for logger (HSQLDB2C7984E18B.org.hsqldb.persist.Logger).
log4j:WARN Please initialize the log4j system properly.

documentation 告诉我 log4j 不是唯一的选择,但它没有告诉我如何配置我的应用程序。谁能指出我这个文档?请记住,我不想将 log4j 用于 hsqldb。

值得一提的是,我引用的第 3 方 jar 需要 log4j。 hsqldb 是否会自动检测到 log4j 存在然后尝试使用它?还是我错过了有关日志记录工作原理的一些基本知识?

【问题讨论】:

    标签: java logging log4j hsqldb


    【解决方案1】:

    查看this link。它说

    如果在类路径中找到 Log4j,则日志记录工具将移交给 Log4j,否则将移交给 java.util.logging。

    【讨论】:

    • 事实上,我的类路径中确实有一个 log4j.properties 文件,我可以通过指定 rootLogger 级别来修复上述警告,但重点是我不想使用 log4j对于 hsqldb。
    • 谢谢,YWE。因为我的第 3 部分库使用 log4j,所以后者需要在类路径中。我在此页面上的回答中描述了如何修复上述 WARN 消息。有关配置 log4j 以避免警告的更多一般帮助,请参阅 stackoverflow.com/questions/4258849/override-log4j-properties
    【解决方案2】:

    该消息指示的结果是不会发生 HSQLDB 的日志记录,因为没有找到附加程序。

    如果您希望禁止显示消息,请在 log4j.properties 文件中添加如下一行:

    log4j.logger.HSQLDB2C7984E18B.org.hsqldb.persist.Logger=FATAL
    

    这将只记录 FATAL 事件,这在正常操作中不会发生。

    您还声明您不想将 log4j 用于 HSQLDB。可以使用 log4j 的软件组件将日志记录配置(包括级别和记录位置等)留给 log4j 属性设置,您可以对其进行编辑和配置。

    在这种情况下,记录器名称基于最初自动生成的“唯一”数据库名称,但您可以在 HSQLDB 中更改。

    【讨论】:

      【解决方案3】:

      因为 YWE 指出,如果在类路径中找到 hsqldb 默认使用 log4j,我需要弄清楚如何覆盖在 3rd-party 库中找到的 log4j.properties。我设法做到了以下几点:

      1. 将已有的log4j.properties复制到我的项目中,并在开头添加以下行:

        log4j.rootLogger=WARN, CONSOLE
        
      2. 添加以下 VM 参数:

        -Dlog4j.log4j.defaultInitOverride=true
        -Dlog4j.configuration=C:/full/path/to/my/log4j.properties
        
      3. 确保这行代码在任何人(例如 hsqldb)尝试使用 log4j 之前运行:

        org.apache.log4j.PropertyConfigurator.configure("log4j.properties");
        

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2011-07-11
        • 2013-11-16
        • 1970-01-01
        • 2011-07-24
        • 1970-01-01
        • 2022-08-23
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多