如何在 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 的自我广告信息?的主要内容,如果未能解决你的问题,请参考以下文章