我没有将 freemarker 用于 struts2,但我看到 freemarker 生成了很多日志记录

Posted

技术标签:

【中文标题】我没有将 freemarker 用于 struts2,但我看到 freemarker 生成了很多日志记录【英文标题】:I am not using freemarker for struts2, but I see lots of logging generated by freemarker 【发布时间】:2017-01-05 05:38:15 【问题描述】:

我正在为我的 Web 应用程序使用 struts 2 和 jsp,但我看到在我的控制台上生成了很多 freemarker 调试消息。

我已经使用 slf4j 和 log4j2 配置关闭了日志记录。但是,更深入地研究配置。

似乎 freemarker 包含在 struts-default 包中,通过扩展它,我还将在我的 Web 应用程序中包含对 freemarker 的支持。

我是否错误地配置了我的 struts.xml 配置?禁用输出到控制台是唯一的方法吗?

如何从我的应用程序中“删除”freemarker?

我的 struts.xml

<package name="test" namespace="/" extends="struts-default">

struts-default.xml

<package name="struts-default" abstract="true" strict-method-invocation="true">
    <result-types>
        <result-type name="chain" class="com.opensymphony.xwork2.ActionChainResult"/>
        <result-type name="dispatcher" class="org.apache.struts2.result.ServletDispatcherResult" default="true"/>
        <result-type name="freemarker" class="org.apache.struts2.views.freemarker.FreemarkerResult"/>
        <result-type name="httpheader" class="org.apache.struts2.result.HttpHeaderResult"/>
        <result-type name="redirect" class="org.apache.struts2.result.ServletRedirectResult"/>
        <result-type name="redirectAction" class="org.apache.struts2.result.ServletActionRedirectResult"/>
        <result-type name="stream" class="org.apache.struts2.result.StreamResult"/>
        <result-type name="velocity" class="org.apache.struts2.result.VelocityResult"/>
        <result-type name="xslt" class="org.apache.struts2.views.xslt.XSLTResult"/>
        <result-type name="plainText" class="org.apache.struts2.result.PlainTextResult" />
        <result-type name="postback" class="org.apache.struts2.result.PostbackResult" />
    </result-types>

【问题讨论】:

寻求调试帮助的问题(“为什么这段代码不起作用?”)必须包括所需的行为、特定的问题或错误以及在问题本身中重现它所需的最短代码。没有明确问题陈述的问题对其他读者没有用处。请参阅:如何创建最小、完整和可验证的示例。 罗马,我从maven下载了一个空白的struts2 war文件,没想到freemarker会生成这样的日志语句。但是,我已经设法根据 FreeMarker FAQ 解决了它。我已经发布了下面的链接,希望对其他人有所帮助。 【参考方案1】:

Struts2 使用 THEMEs 从 Struts 标签生成代码; THEMETEMPLATEs 的集合(每个标签一个); 这个 TEMPLATEs(在 struts2-core-xxx.jar -> 模板中)是 FreeMarker 模板。

那么你并没有直接使用 Freemarker(例如in place of the JSPs),而是 Struts2 隐式使用了 Freemarker,你不能删除它。


XY:您的日志污染问题可以通过将服务器级别提升到 ERROR 并将您的应用程序提升到 DEBUG 来解决,而不是让整个服务器都去 DEBUG。

【讨论】:

根据这个常见问题解答freemarker.org/docs/pgui_misc_logging.html,您必须包含 slf4j 并通过 log4j 配置将其关闭。 好。考虑为您的问题添加另一个答案,总结配置过程

以上是关于我没有将 freemarker 用于 struts2,但我看到 freemarker 生成了很多日志记录的主要内容,如果未能解决你的问题,请参考以下文章

测试 Struts 2 动作,结果类型 freemarker

Struts2 + Freemarker + DisplayTag:如何使其工作

struts 集成freemarker 无法定义局部变量

使用 Struts+Freemarker 更改表单的输出

Struts2 + Sitemesh + Freemarker 不起作用

FreeMarker 模板错误!在struts2中