簡體   English   中英

如何使用 log4j 查看 Jersey

[英]How to use log4j to see into Jersey

我是 log4j 的新手,我試圖用它來更好地理解為什么我的資源提供了415 Media Type Not Supported header。

我正在使用以下內容:

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配置那么簡單。 澤西島內部沒有使用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,你可以使用它:

<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

你可以看到在這里它的運行必須配置

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

我按照這個答案中的建議創建了一個自定義日志記錄功能 class 並注冊它:

https://stackoverflow.com/a/51443054/1462479

然后將它使用的記錄器修改為 log4j。

我無法登錄工作,但我能夠確定如何獲取我需要的ContentType。 我不得不把它添加到我的班級......

@Context
UriInfo uriInfo;

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

    }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM