首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Log4j,maven tomcat7-maven-plugin,spring rest服务

Log4j,maven tomcat7-maven-plugin,spring rest服务
EN

Stack Overflow用户
提问于 2013-11-07 11:07:27
回答 2查看 735关注 0票数 0

我喜欢测试我的rest服务项目,但是它不能以适当的方式工作,不管怎样,我可以自己解决这个问题,但是我必须确定地得到调试信息。(我只看到状态代码: 400坏请求,描述客户端发送的请求在语法上是不正确的。)

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

代码语言:javascript
复制
        <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文件夹中。

看起来像是

代码语言:javascript
复制
<?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。

代码语言:javascript
复制
<?xml version='1.0' encoding='utf-8'?>
<Context cookies="true" >
  <!-- disable session persistence: -->
  <Manager pathname="" />
</Context>

我用mvn干净的tomcat7 7:run启动应用程序,但是没有打印出请求不正确的原因,根本没有打印错误。

我也尝试了不同的方法,但没有运气:

  • 我将一个ExeptionHandler添加到有和不带ResponseStatus注释的类中 @ExceptionHandler @ResponseStatus(HttpStatus.BAD_REQUEST)公共无效句柄(HttpMessageNotReadableException e) {logger.warn(“返回HTTP400BAD请求”,e);}
  • 我将log4j依赖项添加到插件配置中,它们也存在于项目依赖项中。
  • 我将log4j.xml移到了WEB文件夹
  • 我从mvn -X干净tomcat7 7:run开始。
  • 我在pom.xml文件中将资源配置添加到插件配置中 **/log4j.xml
  • 我还检查了公用日志记录和slf4j的依赖项,并将它们排除在外。

所有这些操作都不会激活rest服务post调用的日志记录。啊,我使用了和curl,我还在另一个线程中找到了用curl表示的引号。

我也会很好,如果我得到一个不同的记录器,只是为了获取信息,在那里发生了什么。

EN

回答 2

Stack Overflow用户

发布于 2013-11-07 12:21:08

我认为@ExceptionHandler只有两种有效的返回类型:

  1. 指示要向用户显示的视图的String
  2. 一个ModelAndView,也可以设置适当的视图来显示给用户。

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

至于不好的请求,你能张贴你要发送的内容和REST服务的样子吗?您可以使用FireFox的Firebug插件来捕获请求。

票数 0
EN

Stack Overflow用户

发布于 2013-11-07 14:46:45

好吧,我想我明白了,

一举一动,

  • ExceptionHandler @ExceptionHandler @ResponseStatus(HttpStatus.BAD_REQUEST)公共无效句柄(HttpMessageNotReadableException e) {logger.warn(“返回HTTP400BAD请求”,e);}

在每个REST服务类中,对于调试活动,如果缺少,日志中将不会写入任何内容。

  • 公用日志依赖项应该在依赖项列表中可用。
  • 需要WEB或/src/main/ log4j.properties中的log4j.properties
  • 我将所有记录器设置为DEBUG,但这不是Rest调试所必需的,它取决于ExceptionHandler的日志级别。在我的版本中,警告可以获得输出。

我在问题中描述的所有其他变体都是不必要的,我在所有类中添加了ExceptionHandler之后,基本版本工作得很好。

如果你也想得到更多的信息给客户,这是一个好主意,遵循建议'CodeChimp‘制造。如果您只是添加一个字符串,它将交付名为页面的字符串,或者您可以添加更多的信息,比如ModelAndView,如果您用

代码语言:javascript
复制
@ResponseBody
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/19834350

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档