从 logs4j 禁用 freemarker 日志
Posted
技术标签:
【中文标题】从 logs4j 禁用 freemarker 日志【英文标题】:Disable freemarker logs from logs4j 【发布时间】:2015-02-14 23:46:35 【问题描述】:Similar question 但我使用的是 log4j2。
我需要一种方法来禁用来自 freemarker 的所有日志,在他们的 documentation 他们说我们可以通过调用 Logger.selectLoggerLibrary(Logger.LIBRARY_NONE)
来做到这一点,但他们说
selectLoggerLibrary 必须在 FreeMarker 可以记录任何内容之前及早调用,否则它将没有(一致的)效果。
在 struts2 应用程序中我应该在哪里调用它? (我尝试在我的操作类中使用prepare()
方法调用它,但它不起作用。)或者有没有其他方法可以禁用日志?
【问题讨论】:
我知道它很晚,它可能会帮助某人***.com/questions/50794195/… 【参考方案1】:使用这个语句:
freemarker.log.Logger.selectLoggerLibrary(freemarker.log.Logger.LIBRARY_NONE);
【讨论】:
这已被弃用。能否提供更新后的代码?【参考方案2】:问题是,为什么需要这样禁用它?
你不应该需要那个,所以我想这就是真正的问题所在。有什么故障吗?因为如果没有,为什么不在记录器配置中设置 freemarker
记录器类别被忽略?这是执行此操作的正常方式,无论是否使用 FreeMarker。
无论如何,在 2.3.22(预计在 2015 年初发布)中,您可以使用启动 JVM 的 -Dorg.freemarker.loggerLibrary=none
(即设置 org.freemarker.loggerLibrary
系统属性)。否则,如果您可以在 ServletContextListener
中调用该方法,那肯定已经足够早了。
更新:
响应 cmets... 在大多数应用程序中,您将拥有使用各种日志记录“框架”的 3rd 方库,例如 SLF4J、commons-logging、JUL、Log4j、Log4j2。因此,您必须确保所有这些都被重定向到同一个记录器库,在您的情况下肯定是 Log4j2。我怀疑你的情况没有正确完成,所以现在多个记录器库登录到控制台,每个都有自己的配置设置。
如果 FreeMarker 2.3.x 检测到 org.apache.log4j.Logger
存在,它会使用 Log4j 1.x。它也可以检测和使用的其他记录器库(Log4j2 不在其中)具有较低的优先级。 (如果存在,FreeMarker 2.4.x 将始终使用 SLF4J。)因此,如果将 org.apache.logging.log4j:log4j-1.2-api
添加到依赖项中,则 FM 将使用 org.apache.log4j.Logger
,因此 log4j-1.2.-api
会将 FM 日志消息重定向到 Log4j2。这对我有用,使用这个 Log4j2 配置:
<?xml version="1.0" encoding="UTF-8"?>
<Configuration status="WARN">
<Appenders>
<Console name="Console" target="SYSTEM_OUT">
<PatternLayout pattern="%dHH:mm:ss.SSS %-5level %logger36 - %msg%n" />
</Console>
</Appenders>
<Loggers>
<Root level="debug">
<AppenderRef ref="Console" />
</Root>
<Logger name="freemarker" level="off">
<AppenderRef ref="Console" />
</Logger>
</Loggers>
</Configuration>
【讨论】:
嗯...如果你们需要解决方案,那么也许您应该详细说明问题所在,而不是仅仅投反对票。而且,如果它是一个错误,或者某种不兼容,我也可以修复它。 谢谢!从ServletContextListener
拨打电话有效。不知道为什么,但我无法在 log4j2.xml 中配置它应该被忽略,尝试了我在网上找到的每一件事。听起来 freemarker 忽略了我的 log4j2 的配置......所以从 ServletContextListener
禁用是迄今为止唯一的选择。
糟糕!我第一次看到答案来自移动应用程序,我看到它有一个反对票,现在从桌面我想接受答案并赞成,我看到我是反对票,这肯定是一个错误,但它不会让我支持或删除它,因为它在 3 小时后......
@ElyeM。现在你可以把你的反对票变成赞成票(你可以通过编辑帖子来恢复/删除旧票)......并为 ddekany +1 以维护 FreeMarker :)
谢谢,赞成,@ddekany 您是否使用 log4j2.xml 配置了一次 FreemMaker,因此应该忽略日志?我宁愿在那里做,但它不起作用。以上是关于从 logs4j 禁用 freemarker 日志的主要内容,如果未能解决你的问题,请参考以下文章