2011-04-15 100 views
28

我想使用slf4j + java.util.logging。我知道如何通過logger = LoggerFactory.getLogger(...)logger.warn('...')或其他來設置Java源代碼。slf4j + java.util.logging:如何配置?

但是,用於在slf4j中設置配置的文檔在哪裏?我很困惑...我有log4j手冊,並且很熟悉記錄適配器的基本知識,但是我只是不確定如何讓它與slf4j + java.util.logging一起工作。

即:

  • 其屬性文件和/或JVM -D命令行參數,我需要指定我的配置文件指向它?

  • 其中是java.util.logging配置文件的文檔?

  • 使用slf4j會導致我的配置文件發生任何變化嗎? (也就是我必須聲明的不同,而不是直接使用java.util.logging或log4j)

+1

您沒有找到那些在SL4J文檔的網站? http://www.slf4j.org/docs.html – 2011-04-15 19:13:01

+5

不,它非常簡短。 – 2011-04-15 19:13:31

+0

我沒有得到你想要實現的內容,你想在代碼中使用slf4j的記錄器,並且在輸出記錄或其他方式時使用java.logging? – moritz 2011-04-15 19:18:56

回答

13

this tutorial on jul

的Java -Djava.util.logging.config.file = myLoggingConfigFilePath

但我會建議去Logback

+2

使用j.u.l有一個明顯的優勢,即它易於在類加載器中使用。我們使用它將日誌消息從Web應用程序(WAR)傳播到servlet容器日誌中。 – 2011-04-15 20:06:43

11

slf4j層沒有配置。它只是一個API,後端必須爲(或多或少)提供實現。

要使用java.util.logging作爲slf4j後端,您必須在類路徑中的slf4j分佈中包含slf4j-jdk14-mumle.jar,並執行javadoc中列出的魔法來啓用它。如果沒有,你會有一個運行時錯誤,說沒有slf4j實現活動。

+0

「slf4j網站現在正在運行,所以我無法查看手冊頁或常見問題解答)」 - 確切地說。在我的類路徑中,我有slf4j-api - *。jar和slf4j-jdk14 - *。jar,我只是不知道如何「執行javadoc中列出的魔法」來讓它重定向到文件而不是stdout。 – 2011-04-15 19:19:43

+1

如果您將日誌消息發送到控制檯,這意味着日誌記錄系統可以正常工作。然後,您需要對其進行配置,以便讓其他方面的工作有所不同。即對於jdk日誌記錄,您需要對屬性和log4j執行完全相同的工作,您需要提供一個log4j.xml文件告訴它該做什麼。 – 2011-04-15 19:21:44

+0

好的,那麼我想我的問題就變成了jdk14日誌配置文檔的位置。 – 2011-04-15 19:24:18

2

您不配置SLF4J - 您需要綁定和配置提供程序。我使用專爲SLF4J構建的Logback。你也可以使用log4j。請參閱手冊中的相關條目:http://www.slf4j.org/manual.html#binding

+4

...當然,實際上是_answer原始問題_(爲什麼每個人都投票不答覆?):當然可以使用'java.util.logging'作爲日誌實現,方法是將'slf4j-jdk14- {slf4j-version} .jar'放入類路徑而不是其他任何其他'slf4j- {結合} .jar';然後設置j.u.l.配置使用'-Djava.util.logging.config.file'屬性。 (我_ would_ downvote,但不會因爲我更喜歡logback :-)。但我也喜歡_answers_。) – michael 2013-02-12 00:33:52

3

我已經爲同一目的刪除了Java日誌記錄並進行了logback。實際上,用SLF4J配置logback無關緊要。只需將logback.xml放入具有logback配置的jar根目錄中,並將logback-XX.jar放在classpath中即可。

<configuration> 

    <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender"> 
    <!-- encoders are assigned the type 
     ch.qos.logback.classic.encoder.PatternLayoutEncoder by default --> 
    <encoder> 
     <pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n</pattern> 
    </encoder> 
    </appender> 

    <root level="warn"> 
    <appender-ref ref="STDOUT" /> 
    </root> 
</configuration> 

這是用於登錄到控制檯的配置,但logback手冊有更多示例。

+3

雖然我同意,但這並不回答這個問題。爲了保證得票最高,可以包含如下內容:類似於使用'java -Dlogback.configurationFile =/path/to/config.xml',j.u.l的logback。可以使用:'java -Djava.util.logging.config.file = myLoggingConfig' w/[屬性文件](http://stackoverflow.com/questions/805701/load-java-util-logging-config-file -for-default-initialization)或[class](http://docs.oracle.com/javase/1.4.2/docs/api/java/util/logging/LogManager.html)。 Logback默認使用classpath中的'logback.xml'; j.u.l使用Java安裝目錄中的'logging.properties'。 – michael 2013-02-12 00:25:47

-2

有時會出現,你可以得到帶着這樣編輯你的文件

tomcat-directory/webapps/your_app_name/WEB-INF/classes/log4j.properties

(標準log4j的配置文件)

+0

您是否指定要使用的路徑?如果是這樣,你能澄清它爲什麼可以工作,並在哪個版本的tomcat? – Andreas 2017-06-23 20:29:36

+0

@Andreas無論你的webapps文件夾居住在哪裏。我相信這是tomcat 6,但我認爲這並不重要,因爲它更像是一個log4j的東西。乾杯! – rogerdpack 2017-06-23 20:56:12

+0

downvoters請留下一個理由,謝謝! – rogerdpack 2017-07-01 14:32:35

2

基本上,你只需要有SLF4J-api.1.7.7.jar和SLF4J-jdk14.1.7.7.jar在classpath。然後爲您的應用程序創建一個logging.properties文件,並設置系統屬性 -Djava.util.logging.config.file = {path_to_logging。性能}

檢查this tutorial出來,讓你的例子如何配置不同的日誌框架,如Java記錄器,log4j的,SLF4J的logback等

相關問題