如何在 3.4+ 中禁用 JooQ 的自我广告信息?

Posted

技术标签:

【中文标题】如何在 3.4+ 中禁用 JooQ 的自我广告信息?【英文标题】:How to disable JooQ's self-ad message in 3.4+? 【发布时间】:2015-04-01 01:50:56 【问题描述】:

我是 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);
    );

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

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

【问题讨论】:

您可以购买商业许可证;)更严肃的一点。 Does any of this help? 【参考方案1】:

该消息位于org.jooq.impl.DefaultRenderContext 源文件中,并且正在使用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,则可以通过将级别设置为 WARNING 来禁用来自 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 
*/ 

【讨论】:

我是粉丝,是的,并且肯定会宣传我正在使用它......在项目页面上。但这是实时代码,我想保持日志干净! “确保您遵守您的 jOOQ 许可和维护协议” - 只要这是关于 ASL 2.0 许可的 jOOQ 开源版,就可以了你可以做任何你想做的事情。 “如果你能忍受内疚和羞耻” - Well... ;) @LukasEder 别误会,我喜欢它;如果你想知道我用它做什么,它是为this project 加载巨大的跟踪文件时使用的(我有一个包含 4400 万个跟踪事件的文件......)。我使用 jooq + h2,我打算在显示数据库状态加载的窗口上显示 jooq 徽标;) @fge:感谢您的更新。我没记错,我知道您想删除日志。我们打算让它在免费试用版和开源版中“默认”存在,并且应该可以使用 java.util.logging 设置将其静音... @fge: This answer here worked for me right out of the box。但是,必须在加载任何 jOOQ 类之前调用​​它。例如。在您的main() 所在类的静态块中...【参考方案2】:

这似乎对我有用:

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

【讨论】:

确实有效...非常感谢!更一般地说,为什么 jooq 不依赖 slf4j?这样管理起来会容易得多【参考方案3】:

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

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

【讨论】:

【参考方案4】:

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

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

【讨论】:

【参考方案5】:

在 Jooq 3.11+ 的主类中的 JavaFx 8 上为我工作

@Override
    public void start(Stage primaryStage) throws Exception
     System.getProperties().setProperty("org.jooq.no-logo", "true");
     ///Extra code......


【讨论】:

【参考方案6】:

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

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

这行得通。

【讨论】:

以上是关于如何在 3.4+ 中禁用 JooQ 的自我广告信息?的主要内容,如果未能解决你的问题,请参考以下文章

如何在jooq查询的左连接中检查记录是不是完​​全为空

如何禁用或隐藏我网站上不需要的 Disqus 广告?

如何使用基于 jsontype 属性的 jOOQ 从数据库中检索数据

JOOQ & 交易

windows如何禁用惹人烦的开机启动广告

剩余/长尾流量如何售卖广告