2011-07-14 29 views
35

logback的配置文件在類路徑中找到,因此是Eclipse-project-specific,這不是我想要的。我使用多個Java實用程序,它們全部駐留在單個項目中(共享類路徑),並且我需要爲其中的一些使用特定的配置。如何在單個項目中使用具有logback的多個配置?

我試過變量替換和Joram配置器,但沒有爲我工作。這很可能是我的錯,我有一天會解決它,但現在我需要一個簡單的解決方案。

+0

什麼是你需要的不同部分的「特定配置」? –

+0

沒有什麼真正的「特殊」......在一些實用工具中,我需要記錄更多,而在其他實用工具中我需要記錄更少。這對我來說是最重要的部分。我也想在不同的文件中重定向輸出(最好是基於主類)。 – maaartinus

+0

這聽起來像你應該能夠從一個配置文件管理它。我不確定你的問題中「Eclipse-project-specific」的意思。你能澄清你究竟是什麼? –

回答

54

選項1:使用logback.configurationFile系統屬性指定logback配置文件的位置。這實際上允許您爲每個項目配置多個配置文件。根據logback documentation,此屬性的值可以是URL,類路徑上的資源或應用程序外部文件的路徑。例如:
-Dlogback.configurationFile=/path/to/config.xml

選項2:使用變量替換通過系統屬性設置日誌文件的名稱。例如:

  1. 您的附加器可以設置文件如下:
    <file>/var/tmp/${mycompany.myapplication}.log</file>
  2. 然後你就可以啓動Java時指定變量的值:
    -Dmycompany.myapplication=SomeUtility

OPTION 3:使用系統屬性設置記錄器級別。這將允許您記錄更多/更少。例如:

  1. 將這個到您的logback配置文件:
    <logger name="com.mycompany" level="${mycompany.logging.level:-DEBUG}"/>
    這將導致指定的包記錄在由默認的調試級別。
    -Dmycompany.logging.level=INFO

方案4:

  • 如果你想改變一個特定的應用程序日誌記錄級別爲INFO,然後啓動該應用時,通過以下對Java添加/通過傳遞系統中刪除一個appender將屬性命令行參數傳遞給java。這將允許您登錄到不同的地方。請注意,conditional processing requires janino。例如:

    1. 要把它放到你的logback的配置文件,無論你會放一個<appender-ref>,在ref值更改爲自己<appender> S的一個,當然是:
      <if condition="property("mycompany.logging.console").equalsIgnoreCase("true")"> <then><appender-ref ref="STDOUT"/></then></if>
    2. 如果要啓用此附加器,然後啓動該應用時,通過以下對Java:
      -Dmycompany.logging.console=true

    關於系統性能,你把它們傳遞給Java作爲-D參數,例如
    java -Dmy.property=/path/to/config.xml com.mycompany.MyMain

  • +5

    好的清單!另一種選擇:logback支持編程配置。如果應用程序中的差異點是主類,那麼這些類可以自己配置logback。 –

    相關問題