【问题标题】:Grails on Tomcat - How to log raw HTTP request/responseTomcat 上的 Grails - 如何记录原始 HTTP 请求/响应
【发布时间】:2012-02-08 12:57:44
【问题描述】:

我找不到配置我的虚拟教程 Grails 应用程序以记录 Grails 服务器(实际上是 Tomcat)接受/生成的所有 HTTP 请求和响应的方法。这可能吗?

【问题讨论】:

    标签: tomcat grails logging


    【解决方案1】:

    另一种选择是使用 tomcat 的内置访问日志记录。

    http://tomcat.apache.org/tomcat-6.0-doc/config/valve.html#Access_Log_Valve

    我自己使用这个,它是相当可配置的。

    如何配置tomcat 6

     <Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs"  
                   prefix="localhost_access_log." suffix=".txt" pattern="common" resolveHosts="false"/>
    

    将此添加到您的 server.xml 配置末尾的“主机”标签下。

    【讨论】:

    • 如果您描述如何使其与 Grails 一起使用,我会打赌这个选择。不幸的是,Grails(在执行 Grails run-app 时)执行了一些隐藏的魔法来在其 JVM 实例中启动 Tomcat,上帝知道在这种情况下如何配置该东西:(
    • 下载tomcat。将阀门配置添加到 server.xml。然后输入 grails war。将战争复制到 tomcat webapps 文件夹。启动tomcat。现在对您的应用程序执行几个请求。然后检查您的 tomcat 日志文件夹以获取访问日志。
    • 啊,这实际上是运行 Tomcat 本身。我希望在开发模式下进行跟踪,即“grails run-app”。恐怕这有点不同。
    • 好吧,grails 中的 run-app 也可以运行 tomcat。理所当然地,还应该有一个 server.xml 文件,您可以通过某种方式对其进行编辑或引用。但是,我自己并没有这样做。
    • 根据 tomcat 文档,server.xml 应该位于$CATALINA_BASE/conf/server.xmlso,如果您可以确定(例如通过 System.properties)启动时 tomcat 的主文件夹是什么。然后你可能只需要添加你自己的 server.xml ......可能...... :) 祝你好运,玩得开心。
    【解决方案2】:

    您可以使用 Grails 插件:https://github.com/TouK/grails-httplogger 或 Tomcat 过滤器。
    如果你使用 Tomcat 7,它就是 RequestDumperFilter。 我更喜欢 RequestDumperFilter。

    简而言之:

    安装 Grails 模板

    grails 安装模板

    编辑 web.xml 并添加 RequestDumperFilter

    <filter>
    <filter-name>requestdumper</filter-name>
    <filter-class>org.apache.catalina.filters.RequestDumperFilter</filter-class>
    </filter>
    
    <filter-mapping>
    <filter-name>requestdumper</filter-name>
    <url-pattern>*</url-pattern>
    </filter-mapping>
    

    编辑 Config.groovy 中的 log4j 部分并添加

    debug   'org.apache.catalina.filters.RequestDumperFilter'
    

    这应该足够了。

    如果您需要更多信息,here 您会找到详细说明。

    【讨论】:

    【解决方案3】:

    此类日志记录可以很容易地实现为过滤器 - 可以是 Grails 过滤器(参见 http://grails.org/doc/latest/guide/theWebLayer.html#filters 以了解这些过滤器的描述和示例日志过滤器),也可以作为标准 servlet 过滤器(可以在此处找到示例:http://www.java2s.com/Code/Java/Servlets/LogFilter.htm )。

    如果您选择第二个选项,则必须修改 web.xml 以包含您的过滤器。为此,请执行grails install-templates。这会将标准的web.xml 复制到您项目中的templates/WEB-INF 目录中,您可以在那里进行修改。

    【讨论】:

    • 我已经尝试过这个(作为 servlet 过滤器),它确实有效,但是需要一些编码。
    猜你喜欢
    • 2021-12-08
    • 2010-11-05
    • 2017-12-18
    • 1970-01-01
    • 1970-01-01
    • 2016-11-21
    • 1970-01-01
    • 2019-03-16
    • 2020-02-01
    相关资源
    最近更新 更多