如何使用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时抛出“连接被拒绝”。

我担心它不像将Jersey软件包添加到你的Log4J配置那么简单。 Jersey不在内部使用Log4J; 相反,它使用Java日志记录 。

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

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

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

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

  2. logging.properties文件中添加SLF4JBridgeHandler作为日志记录处理程序

     handlers=org.slf4j.bridge.SLF4JBridgeHandler 

然后SLF4J可以绑定到Log4J,然后您可以像往常一样使用log4j.properties来指定Jersey类的日志记录级别。

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

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

  2. 或直接使用Java日志记录。 要配置Java日志记录以输出到文件 ,请将以下内容添加到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 

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

  org.slf4j jul-to-slf4j 1.7.5  

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

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

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

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

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

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

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

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