2015-11-24 21 views
0

我通常使用Logback.xml和application.properties的如下因素包獲得所有我需要的。 Logback.xml:什麼是我的外部庫JAR使用Logback.xml正確的方式

<configuration> 

    <!-- External properties --> 
    <property file="./application.properties" /> <!-- for build --> 

    <timestamp key="byDate" datePattern="yyyyMMdd"/> 

    <!-- Send messages to System.out - CONSOLE --> 
    <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{5} - %msg%n</pattern> 
     </encoder> 
     <withJansi>true</withJansi> 
    </appender> 

    <!-- Send messages to a rolling file --> 
    <appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender"> 

     <file>${logging.path}/${spring.application.name}.log</file> 
     <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"> 
      <!-- daily rollover. Make sure the path matches the one in the file element or else the rollover logs are placed in the working directory. --> 
      <fileNamePattern>${logging.path}/${spring.application.name}_%d{yyyy-MM-dd}.%i.log</fileNamePattern> 
      <timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP"> 
       <maxFileSize>5MB</maxFileSize> 
      </timeBasedFileNamingAndTriggeringPolicy> 
      <!-- keep 30 days' worth of history --> 
      <maxHistory>30</maxHistory> 
     </rollingPolicy> 
     <encoder> 
      <charset>UTF-8</charset> 
      <pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{5} - %msg%n</pattern> 
     </encoder> 

    </appender> 

    <root level="${logging.level}"> 
     <appender-ref ref="STDOUT" /> 
     <appender-ref ref="FILE" /> 
    </root> 

</configuration> 

application.properties:

spring.application.name=MyApp 

#Logging Settings 
logging.level=INFO 
logging.path=/data/MyApp/logs/ 
logging.config=/data/MyApp/Logback.xml 

但現在我想寫一個外部JAR,我將包括我的 「其他項目」。但我的「其他項目」已經有Logback.xml和application.properties,我希望外部的Jar也會使用它。我會盡量不在Logback.xml和application.properties的外部Jar項目中,我一直在想它會找到Logback.xml。但它不起作用。當我從外部Jar調用某些東西時,我沒有看到任何日誌消息。你能幫我解答一下,在這種情況下我應該怎麼做?順便說一句,如果它是importanl我使用Maven的建設和依賴。所以我建立了外部罐子,並將其包含在我的項目中:

<dependency> 
      <groupId>com.myapp.someprovider</groupId> 
      <artifactId>SomeAppProvider</artifactId> 
      <version>1.0.0</version> 
      <scope>system</scope> 
      <systemPath>/Users/me/Projects/Java/Server/SomeAppProvider/target/SomeAppProvider-1.0.0.jar</systemPath> 
     </dependency> 

在此先感謝!

回答

1

日誌配置和屬性文件應在主要資源文件夾(如的src/main /資源如果你正在使用maven),您構建最終的二進制的(例如,如果你正在建設一個將.war項目Web應用程序)。此中央日誌配置文件需要包含完整應用程序的完整日誌配置,包括您所依賴的任何jar。

如果需要單獨的日誌配置文件在你的模塊(例如用於測試目的),這些都應該被放置在測試資源文件夾(例如SRC /測試/資源Maven的)。

作爲一個側面說明,你通常應該儘量避免在你的Maven的依賴使用Systempath下。像你在你的例子中一樣對一個系統路徑進行硬編碼是在乞求麻煩,特別是在涉及更多人的項目中。

+0

感謝您的幫助!但我仍然不明白。假設我的ext jar項目 - 項目A和我的大項目 - 項目B。當然,我在「Project B/src/main/resources /」中有我的Logback.xml和application.properties,而我在「項目A/src/main/resources /「。對?在這種情況下,我看到項目B的登錄messedges只(((我建設項目A的最終二進制的罐子。 – user3742622

+0

在你的榜樣,記錄了外部JAR(項目A)將在項目B中的日誌配置中定義從整個應用程序登錄一切都應該在同一個日誌文件最終不管代碼來自哪個罐子,因爲你在兩個模塊使用相同的日誌API的。 – marthursson

+0

是的,我是用兩個模塊相同的日誌記錄API。 ..但它不像你說的那樣工作... – user3742622

相關問題