java - Log4j、maven tomcat7-maven-plugin、spring rest 服务

标签 java spring rest maven tomcat

我喜欢测试我的休息服务项目,但它似乎没有以适当的方式工作,无论如何我可以自己修复它,但我必须确保获得调试信息。 (刚看到Status Code: 400 Bad Request,说明客户端发送的请求语法错误。)

好的,我在 pom 文件中使用了带有以下配置的 tomcat7-maven-plugin

        <plugin>
            <groupId>org.apache.tomcat.maven</groupId>
            <artifactId>tomcat7-maven-plugin</artifactId>
            <version>2.0</version>
            <configuration>
                <port>9090</port>
                <httpsPort>9443</httpsPort>
                <!-- <path>/${project.build.finalName}</path> -->
                <contextFile>${basedir}/src/main/resources/context.xml</contextFile>
                <keystoreFile>${basedir}/src/main/resources/server.jks</keystoreFile>
                <keystorePass>123456</keystorePass>

            </configuration>
        </plugin>

log4j 文件位于/src/main/resources/文件夹中,将照常复制到 classes 文件夹中。

看起来像

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE log4j:configuration SYSTEM "log4j.dtd">

<log4j:configuration>

    <appender name="console" class="org.apache.log4j.ConsoleAppender">
        <layout class="org.apache.log4j.PatternLayout">
            <param name="ConversionPattern" value="%-5p %d +++ P R O D +++ [%t] %c: %m%n" />
        </layout>
    </appender>

    <logger name="org">
        <level value="error" />
    </logger>
    <logger name="org.springframework.web">
        <level value="DEBUG" />
    </logger>
    <root>
        <level value="DEBUG" />
        <appender-ref ref="console" />
    </root>

</log4j:configuration>

我在插件需要的同一文件夹中还有一个 content.xml

<?xml version='1.0' encoding='utf-8'?>
<Context cookies="true" >
  <!-- disable session persistence: -->
  <Manager pathname="" />
</Context>

我用 mvn clean tomcat7:run-war 启动应用程序但是没有打印出 Request 不正确的原因,根本没有打印错误。

我也尝试过不同的方法,但没有成功:

  • 我在带有和不带有 ResponseStatus 注释的类中添加了一个 ExeptionHandler

     @ExceptionHandler
     @ResponseStatus(HttpStatus.BAD_REQUEST)
     public void handle(HttpMessageNotReadableException e) {
          logger.warn("Returning HTTP 400 Bad Request", e);
     }
    
  • 我将 log4j 依赖项添加到插件配置中,它们也在项目依赖项中,仅供引用。

  • 我将 log4j.xml 移动到 WEB-INF 文件夹
  • 我从 mvn -X clean tomcat7:run-war 开始
  • 我将资源配置添加到 pom.xml 文件中的插件配置

                <resources>
                    <resource>
                        <includes>
                            <include>**/log4j.xml</include>
                        </includes>
                    </resource>
                </resources>
    
  • 我还检查了 commons-logging 和 slf4j 的依赖关系并排除了它们

所有这些操作都不会激活我的休息服务后调用的日志记录。 啊,我使用了 firefox restclient 和 curl,我也在另一个线程中找到了 curl 中的引号。

我也很好,如果我启用了不同的记录器,只是为了获取其中发生的信息。

最佳答案

我相信@ExceptionHandler 只有两种有效的返回类型:

  1. 一个 String 指示要显示给用户的 View
  2. 一个 ModelAndView,也设置了正确的 View 以显示给用户

您的方法似乎返回 void,我相信这会使 Spring 一起忽略异常处理程序。

至于 Bad Request,您能发布您发送的内容以及 REST 服务是什么样的吗?您可以使用 FireFox 的 Firebug 插件拦截请求。

关于java - Log4j、maven tomcat7-maven-plugin、spring rest 服务,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19834350/

相关文章:

java - BST 节点删除困惑 [Java]

java - 如何在 Java 中按周映射日期?

spring - OAUTH的Spring Rest模板

rest - 有谁知道遵循 HATEOAS 原则的 RESTful 客户端示例?

java - REST 调用减慢了 Spring Boot 应用程序的速度 - 需要改进性能

java - JLayeredPane 中缺少 JPanel

java - 使用 Java API 动态创建 Json 字符串?

java - 我需要当前易于遵循的说明来从 XML 配置 spring 集成 kafka

java - Spring Security OAuth2服务器端,如何在所有请求上要求client_id和client_secret

rest - 当不支持 HTTP 方法时向客户端发送消息