3.4+如何关闭JooQ的自广告信息?

How to disable JooQ's self-ad message in 3.4+?

我是 JooQ 的忠实粉丝,但不幸的是,自从从 3.3 升级以来,它每次在我的代码退出之前都会向控制台打印一条非常烦人的消息:

Feb 02, 2015 7:28:06 AM org.jooq.tools.JooqLogger info
INFO: 

@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
<snip>
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@  Thank you for using jOOQ 3.5.1

很遗憾,我根本无法删除此日志。

请注意,我不使用 slf4j、log4j 或任何日志 API;因此我唯一可用的机制是 j.u.l.

我试过用这个完全禁用它:

static {
    Stream.of(Logger.getAnonymousLogger(), Logger.getGlobal(),
        Logger.getLogger("org.jooq.tools.JooqLogger")
    ).forEach(l -> {
        l.setLevel(Level.OFF);
        final Handler[] handlers = l.getHandlers();
        Arrays.stream(handlers).forEach(l::removeHandler);
    });
}

不幸的是,它不起作用,消息仍然出现。

如何在不修改代码的情况下使此消息消失,我想在此处避免这种情况?

该消息位于 org.jooq.impl.DefaultRenderContext source file and it is using the org.jooq.Constants 记录器中。相关源代码如下:

    /* [trial] */ 
    JooqLogger l = JooqLogger.getLogger(Constants.class); 
    String message;
    message = "Thank you for using jOOQ " + Constants.FULL_VERSION;

    /* [pro] xx 
    xxxxxxx x xxxxxx xxx xxx xxxxx xxx xx xxx xxxx xxxx x x xxxxxxxxxxxxxxxxxxxxxx x x xxxxx xxxxxxxxx 
    xx [/pro] */ 

该消息似乎是因为您使用的是试用版而生成的。我假设升级到专业版会禁用该消息。还有什么可以更好地表明您是该项目的忠实粉丝?

否则,如果您可以接受 guilt and shame,您可以通过将级别设置为警告来禁用来自 org.jooq.Constants 记录器的信息消息。

这可以通过将以下内容添加到您的 logging.properties:

#ThanksNoThanks
org.jooq.Constants.level=WARNING

或在Java代码中调用以下方法:

//SorryNotSorry
private static final JOOQ_AD_LOGGER = Logger.getLogger("org.jooq.Constants");
static {
   JOOQ_AD_LOGGER.setLevel(Level.WARNING);
}

确保您遵守 jOOQ 许可和维护协议:

jOOQ License and Maintenance Agreement: 
* ----------------------------------------------------------------------------- 
* Data Geekery grants the Customer the non-exclusive, timely limited and 
* non-transferable license to install and use the Software under the terms  of 
* the jOOQ License and Maintenance Agreement. 
* 
* This library is distributed with a LIMITED WARRANTY. See the jOOQ License 
* and Maintenance Agreement for more details: http://www.jooq.org/licensing 
*/ 

这似乎对我有用:

static {
    LogManager.getLogManager().reset();
}

这也表示为解决方案a couple of times in this Stack Overflow question

请注意,版本 3.6+ 也将附带 system property that can be used to deactivate displaying this logo:

-Dorg.jooq.no-logo=true

如果您使用 org.slf4j.Logger 进行日志记录,您可以在 resources/logback.xml 中添加类似的内容

<logger name="org.jooq" level="warn" additivity="false"> <appender-ref ref="STDOUT" /> </logger>

在 v3.6 及更高版本中,您可以执行以下操作:

System.setProperty("org.jooq.no-logo", "true");

这对我在 Jooq 3.11+

的主要 class JavaFx 8 上有效
@Override
    public void start(Stage primaryStage) throws Exception{
     System.getProperties().setProperty("org.jooq.no-logo", "true");
     ///Extra code......

}

我在 logback-spring.xml 中使用 slf4j,我添加了:

<logger name="org.jooq.Constants" level="warn">
        <appender-ref ref="STDOUT" />
</logger>

这有效。