2013-04-09 53 views
0

我試圖用一個使用jackrabbit-standalone-2.6.0.jar的程序來設置日誌記錄。這個檔案包含一些slf4j軟件包(org.slf4j,org.slf4j.helpers,org.slf4j.impl,org.slf4j.spi),但據我所見,沒有日誌框架。但是,當我添加了SLF4J-log4j12-1.7.2.jar我得到消息:如何配置jackrabbit-standalone-2.6.0.jar的日誌記錄器

SLF4J:見於 [JAR綁定:文件:/ d:/Anwendungen/EclipsePlugins/Jackrabbit/jackrabbit-standalone-2.6。 0.jar!/org/slf4j/impl/StaticLoggerBinder.class] SLF4J:找到綁定 [jar:file:/ D:/Anwendungen/EclipsePlugins/slf4j-1.7.2/slf4j-1.7.2/slf4j-log4j12 -1.7.2.jar!/org/slf4j/impl/StaticLoggerBinder.class]

有沒有機會看看這裏使用了哪種實現器?

我想配置記錄器。現在它將大量的DEBUG消息寫入名爲「jackrabit.log_IS_UNDEFINED」的文件,我迫切需要抑制這一點。在互聯網上有幾個暗示要建立記錄器,但我不完全明白我需要做什麼。 類「DOMConfigurator」和「PropertyConfigurator」在包中不可用,但在添加例如「slf4j-log4j12-1.7.2.jar」時,我會得到上述消息。所以我無法在程序中初始化記錄器。 據說將配置-XML添加到類路徑中。我試過了(在Eclipse中,我添加了包含XML的文件夾到BuildPath,然後我從XML文件創建了一個jar文件,並將此jar文件添加到BuildPath中),但它沒有任何區別。

我讀了http://logging.apache.org/log4j/1.2/manual.html中的描述「默認初始化過程」,但必須聲明我完全不理解它。 這是什麼意思: 2.將資源字符串變量設置爲log4j.configuration系統屬性的值。指定默認初始化文件的首選方法是通過log4j.configuration系統屬性。如果未定義系統屬性log4j.configuration,則將字符串變量資源設置爲其默認值「log4j.properties」。 我在哪裏必須指定資源字符串變量?

我的log4j.xml文件:

<?xml version="1.0" encoding="UTF-8"?> 
<!DOCTYPE log4j:configuration SYSTEM "log4j.dtd"> 

<log4j:configuration xmlns:log4j="http://jakarta.apache.org/log4j/"> 
      <appender name="Console" class="org.apache.log4j.ConsoleAppender"> 
          <layout class="org.apache.log4j.PatternLayout"> 
             <param name="ConversionPattern" value="%d  %-5p  [%c{1}] %m %n" /> 
         </layout> 
     </appender> 

     <root> 
         <priority value="info" /> 
         <appender-ref ref="Console" /> 
     </root> 
</log4j:configuration> 

任何想法來配置採集器編程或成爲默認的初始化是非常歡迎的。

烏爾裏希

回答

0

隨着1.6.6版本中,如果多個綁定在類路徑中找到,SLF4J會輸出它結合框架/實現類的名稱。就在「SLF4J: Found binding」行後,應該有一個開頭的行:

"SLF4J: Actual binding is of type []" 

你錯過了這條線?

jackrabbit-standalone-2.6.0.jar的內容表明它的船隻以logback作爲日誌框架。 jackrabbit-standalone-2.6.0.jar文件還附帶一個logback.xml配置文件。

這裏是logback.xml文件:

<configuration> 
    <appender name="jackrabbit" class="ch.qos.logback.core.FileAppender"> 
    <file>${jackrabbit.log}</file> 
    <encoder> 
     <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} %-5level %-40([%thread] %F:%L) %msg%n</pattern> 
    </encoder> 
    </appender> 

    <appender name="jetty" class="ch.qos.logback.core.FileAppender"> 
    <file>${jetty.log}</file> 
    <encoder> 
     <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} %-5level %-40([%thread] %F:%L) %msg%n</pattern> 
    </encoder> 
    </appender> 

    <logger name="org.mortbay.log" level="${log.level}" 
      additivity="false"> 
    <appender-ref ref="jetty"/> 
    </logger> 

    <root level="${log.level}"> 
    <appender-ref ref="jackrabbit"/> 
    </root> 
</configuration> 

如Unix shell中,在中${} designates a variable logback.xml任何字符串。

查看上面的logback.xml文件,我們可以看到變量$ {jackrabbit.log},$ {jetty.log}和「$ {log.level}被引用,這些變量由prepareServerLog ()方法在Main class of jackrabbit-standalone2。prepareServerLog()被調用,除非在命令行中給出了「-i」或「 - cli」選項。 ,在這裏張貼所有由SLF4J打印的信息以及您用來啓動jackrabbit-standalone的命令會很有幫助。

+0

沒有這樣的信息,我現在再次檢查它 I請勿立即將獨眼龍系統作爲獨立系統調用;我的批處理程序使用jcr 2.0-API通過WebDAV訪問正在運行的jackrabbit實例。提供所有需要的類的最簡單方法是將獨立jar添加到批處理程序的類路徑中。 感謝您的更新。它有很多幫助。我將讀取logback-docu文件以確定如何確保文件不再被寫入 - 而不重新打包存檔。也許你也可以在這裏給我建議。 – Ulrich 2013-04-09 10:40:58

+0

如果沒有調用Main類的jackrabbit-standalone,你可以自己定義$ {jackrabbit.log}和「$ {log.level},只需將jackrabbit.log和log.level定義爲java系統屬性 – Ceki 2013-04-09 12:58:45

+0

I'我創建了一個logback.xml文件,並設置了一個系統屬性logback.configurationFile來引用它。在xml中,我設置了一個過濾器來放置DEBUG消息,這樣就停止了消息氾濫。到目前爲止,我看不到另一個解決方案這個問題 – Ulrich 2013-04-09 14:19:10