hsqldb 内部事件日志配置

Posted

技术标签:

【中文标题】hsqldb 内部事件日志配置【英文标题】:hsqldb internal event log configuration 【发布时间】: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 存在然后尝试使用它?还是我错过了有关日志记录工作原理的一些基本知识?

【问题讨论】:

【参考方案1】:

查看this link。它说

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

【讨论】:

事实上,我的类路径中确实有一个 log4j.properties 文件,我可以通过指定 rootLogger 级别来修复上述警告,但重点是我不想使用 log4j对于 hsqldb。 谢谢,YWE。因为我的第 3 部分库使用 log4j,所以后者需要在类路径中。我在此页面上的回答中描述了如何修复上述 WARN 消息。有关配置 log4j 以避免警告的更多一般帮助,请参阅 ***.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。我设法做到了以下几点:

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

    log4j.rootLogger=WARN, CONSOLE
    

    添加以下 VM 参数:

    -Dlog4j.log4j.defaultInitOverride=true
    -Dlog4j.configuration=C:/full/path/to/my/log4j.properties
    

    确保这行代码在任何人(例如 hsqldb)尝试使用 log4j 之前运行:

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

【讨论】:

以上是关于hsqldb 内部事件日志配置的主要内容,如果未能解决你的问题,请参考以下文章

windows进程创建 事件日志

haproxy配置日志及自定义日志

事件日志如何创建自定义报表

Keycloak把登录事件记录到日志文件

匿名用户调用时,Web 服务无法写入事件日志

是否可以将Azure信息保护活动日志流式传输到事件中心?