如何使用log4j查看Jersey

时间:2013-03-15 16:07:49

标签: java log4j jersey

我是log4j的新手,我正在尝试使用它来更好地了解我的资源为何提供415 Media Type Not Supported标题。

我正在使用以下内容:

log4j.rootCategory=WARN, stdout

log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%d{ABSOLUTE} %5p %t %c:%L - %m%n

log4j.category.com.sun.jersey=DEBUG,stdout

这个似乎就像它应该可以工作但我在控制台中没有显示有关POST到达此应用程序的任何内容。我知道它正在到达应用程序,因为如果我关闭应用程序,POSTer会在尝试POST时抛出“连接被拒绝”。

4 个答案:

答案 0 :(得分:10)

我担心它不像将Jersey软件包添加到Log4J配置那么简单。泽西岛内部没有使用Log4J;相反,它使用Java logging

如果您更喜欢使用Log4J,那么您可以选择将Java日志记录配置为使用SLF4JBridgeHandler作为日志记录处理程序。

通常,这是通过JVM属性指定日志记录属性文件,并向属性文件添加处理程序来完成的,如下所示:

  1. 指定日志记录属性文件

    -Djava.util.logging.config.file=/path/to/logging.properties

  2. SLF4JBridgeHandler文件

    中添加logging.properties作为日志记录处理程序
    handlers=org.slf4j.bridge.SLF4JBridgeHandler
  3. 然后SLF4J可以绑定到Log4J,然后您可以像往常一样使用log4j.properties来指定Jersey类的日志记录级别。

    顺便说一句,我的建议 - 如果您只是为了快速和肮脏的调试而做 - 这是:

    1. 将调试器附加到您的应用程序(假设您有应用程序源代码);

    2. 或直接使用Java日志记录。要configure Java logging to output to a file,请将以下内容添加到logging.properties文件中,如前所述 -

      com.sun.jersey.level=DEBUG
      com.sun.jersey.handlers=java.util.logging.FileHandler
      java.util.logging.FileHandler.pattern=/path/to/debugging.log
      java.util.logging.FileHandler.formatter=java.util.logging.SimpleFormatter

答案 1 :(得分:5)

您可以先使用JUL to SLF4J Bridge将其添加到类路径中。如果你使用maven,你可以使用它:

<dependency>
    <groupId>org.slf4j</groupId>
    <artifactId>jul-to-slf4j</artifactId>
    <version>1.7.5</version>
</dependency>

将这些行添加到静态初始化程序块或主方法中:

LogManager.getLogManager().reset();
SLF4JBridgeHandler.install();

现在,您可以从log4j.properties文件中控制泽西日志:

log4j.category.org.glassfish.jersey=WARN,stdout

答案 2 :(得分:0)

你可以看到 here 它运行了 你必须配置你的

  • 的web.xml
  • log4j.properties
  • Log4JInitServlet.java
  • Log4JTestServlet.java

答案 3 :(得分:-5)

我无法登录工作,但我能够确定如何获取我需要的ContentType。我不得不把它添加到我的班级......

@Context
UriInfo uriInfo;

@PostConstruct
public void myfunc() {
    if (uriInfo == null) { //breakpoint on this line, so I can see what uriInfo is

    }
}