Struts2 从logs4j禁用freemarker日志

Struts2 从logs4j禁用freemarker日志,struts2,freemarker,log4j2,Struts2,Freemarker,Log4j2,但我使用的是log4j2 我需要一种方法来禁用freemarker的所有日志,他们说我们可以调用Logger.selectLoggerLibrary(Logger.LIBRARY\u NONE),但他们说 selectLoggerLibrary必须在FreeMarker记录任何内容之前提前调用,否则它将不会产生(一致的)效果 在struts2应用程序中,我在哪里调用它?(我尝试在action类中的prepare()方法中调用它,但它不起作用。)或者有其他方法禁用日志吗?问题是,为什么需要这样禁用

但我使用的是log4j2

我需要一种方法来禁用freemarker的所有日志,他们说我们可以调用
Logger.selectLoggerLibrary(Logger.LIBRARY\u NONE)
,但他们说

selectLoggerLibrary必须在FreeMarker记录任何内容之前提前调用,否则它将不会产生(一致的)效果


在struts2应用程序中,我在哪里调用它?(我尝试在action类中的
prepare()
方法中调用它,但它不起作用。)或者有其他方法禁用日志吗?

问题是,为什么需要这样禁用它

你不应该需要,所以我想这才是真正的问题所在。有什么故障吗?因为如果没有,为什么不在记录器配置中将
freemarker
记录器类别设置为忽略?这是正常的做法,不管是不是FreeMarker

无论如何,在2.3.22(预计于2015年初发布)中,您可以在启动JVM的地方使用
-Dorg.freemarker.loggerLibrary=none
(即,设置
org.freemarker.loggerLibrary
系统属性)。否则,如果您可以在
ServletContextListener
中调用该方法,那肯定足够早了

更新:

对评论的反应。。。在大多数应用程序中,您将拥有使用各种日志“框架”的第三方库,如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="%d{HH:mm:ss.SSS} %-5level %logger{36} - %msg%n" />
    </Console>
  </Appenders>
  <Loggers>
    <Root level="debug">
      <AppenderRef ref="Console" />
    </Root>
    <Logger name="freemarker" level="off">
      <AppenderRef ref="Console" />
    </Logger>
  </Loggers>
</Configuration>

使用以下语句:

freemarker.log.Logger.selectLoggerLibrary(freemarker.log.Logger.LIBRARY_NONE);

嗯。。。如果你们需要一个解决方案,那么也许你们应该详细说明问题所在,而不仅仅是否决投票。而且,如果它是一个bug,或者某种不兼容,我也可以修复它。谢谢!从
ServletContextListener
调用成功。不知道为什么,但我不能在log4j2.xml中配置它,它应该被忽略,尝试了我在网上找到的每一件事。听起来freemarker忽略了我的log4j2配置。。。因此,到目前为止,从
ServletContextListener
禁用是唯一的选项。呜呜!我第一次看到答案是从移动应用程序,我看到它有一个向下投票,现在从桌面我想接受答案和向上投票,我看到我是向下投票,这肯定是一个错误,但它不会让我向上投票或删除它,因为它在3小时后…@ElyeM。现在,您可以将您的否决票转换为赞成票(您可以通过编辑帖子恢复/删除旧票)。。。和+1到ddekany,用于维护FreeMarker:)谢谢,向上投票,@ddekany您是否已将once FreemMaker配置为log4j2.xml,以便忽略日志?我宁愿在那里做,但它不起作用。我知道已经很晚了,它可能会帮助一些人。这是不赞成的。你能提供更新的代码吗?