如何使用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属性指定日志记录属性文件,以及向属性文件添加处理程序来完成的,如下所示:
-
指定日志记录属性文件
-Djava.util.logging.config.file=/path/to/logging.properties
-
在
logging.properties
文件中添加SLF4JBridgeHandler
作为日志记录处理程序handlers=org.slf4j.bridge.SLF4JBridgeHandler
然后SLF4J可以绑定到Log4J,然后您可以像往常一样使用log4j.properties
来指定Jersey类的日志记录级别。
顺便说一句,我的建议 – 如果您只是为了快速和脏调试而这样做 – 是:
-
将调试器附加到您的应用程序(假设您有应用程序源代码);
-
或直接使用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 } }