2017-03-13 23 views
1

我使用這些依賴關係:添加春季啓動配置文件,以偵探/基普金日誌

compile 'org.springframework.cloud:spring-cloud-starter-zipkin' 
compile 'org.springframework.cloud:spring-cloud-starter-sleuth' 
compile 'org.springframework.cloud:spring-cloud-sleuth-zipkin' 

有沒有一種可能,以當前活動的配置文件(S)添加到每個日誌行?這將使得它可以過濾基於在Splunk的/ ELK型材日誌/ ...

所以不是

2017-03-13 13:38:30.465 INFO [app,,,] 19220 --- [   main] com.company.app.Application : Started Application in 20.682 seconds (JVM running for 22.166) 

應該登錄

2017-03-13 13:38:30.465 INFO [app,,,] [dev] 19220 --- [   main] com.company.app.Application : Started Application in 20.682 seconds (JVM running for 22.166) 

編輯: 基於在Marcin的回答中,我執行如下:

application.yml

logging: 
    pattern: 
    level: "%X{profiles} %5p" 

ProfileLogger.java

public class ProfileLogger implements SpanLogger { 

    private final Environment environment; 
    private final Logger log; 
    private final Pattern nameSkipPattern; 

    @Autowired 
    public ProfileLogger(String nameSkipPattern, final Environment environment) { 
     this.nameSkipPattern = Pattern.compile(nameSkipPattern); 
     this.environment = environment; 
     this.log = org.slf4j.LoggerFactory.getLogger(this.getClass()); 
    } 

    private void setProfiles() { 
     MDC.put("profiles", Arrays.toString(environment.getActiveProfiles())); 
    } 

    @Override 
    public void logStartedSpan(Span parent, Span span) { 
     setProfiles(); 
     ... 
    } 
    ... // (as https://github.com/spring-cloud/spring-cloud-sleuth/blob/master/spring-cloud-sleuth-core/src/main/java/org/springframework/cloud/sleuth/log/Slf4jSpanLogger.java) 
} 

LogConfig.java

@Configuration 
public class LogConfig { 

    private final Environment environment; 

    @Autowired 
    public LogConfig(final Environment environment) { 
     this.environment = environment; 
    } 

    @Bean 
    SpanLogger getLogger() { 
     return new ProfileLogger("", environment); 
    } 
} 

這將打印日誌類似如下:

2017-03-13 14:47:02.796 INFO 22481 --- [   main] com.company.app.Application : Started Application in 16.115 seconds (JVM running for 16.792) 
2017-03-13 14:47:32.684 [localhost, swagger] TRACE 22481 --- [pool-2-thread-1] c.c.app.config.ProfileLogger : Starting span: [Trace: bfcdd2ce866efbff, Span: bfcdd2ce866efbff, Parent: null, exportable:true] 

這已經是好的,但不完全是我」米尋找尚未。 我想從頭開始添加配置文件 - >即使「已啓動應用程序」也應該包含配置文件 - 如果可能的話。其次,我想在INFO22481之間移動profiles

還有一個問題在實施過程中提出了:在鏈接的實現有這樣的說法:

if (this.log.isTraceEnabled()) { 
    this.log.trace(text, span); 
} 

是否意味着你只有日誌級別設置爲TRACE發送的痕跡?如果是這樣,我怎樣才能改進日誌記錄到這種方法(給出一個日誌級別的調試/信息/警告)?我認爲在導入依賴關係時,Sleuth/Zipkin覆蓋了日誌模式,因此本地日誌看起來與跟蹤相同。最終,我有興趣在本地stdout以及Zipkin中顯示配置文件。

編輯2:

<springProperty scope="context" name="activeSpringProfiles" source="spring.profiles.active"/> 
<!-- Example for logging into the build folder of your project --> 
<property name="LOG_FILE" value="${BUILD_FOLDER:-build}/${activeSpringProfiles:-}"/>​ 

<!-- You can override this to have a custom pattern --> 
<property name="CONSOLE_LOG_PATTERN" 
value="%clr(%d{yyyy-MM-dd HH:mm:ss.SSS}){faint} %clr(${LOG_LEVEL_PATTERN:-%5p}) [${activeSpringProfiles:-}] %clr(${PID:- }){magenta} %clr(---){faint} %clr([%15.15t]){faint} %clr(%-40.40logger{39}){cyan} %clr(:){faint} %m%n${LOG_EXCEPTION_CONVERSION_WORD:-%wEx}"/> 

請注意,您必須以具有添加bootstrap.yml文件太:隨着馬爾辛的幫助下,我已經通過引入resources/logback-spring.xml文件包含這些行改變格局應用程序名稱正確顯示。如果沒有bootstrap.yml文件,上面的日誌模式只是將「bootstrap」作爲應用程序名稱打印。

bootstrap.yml只包含

spring: 
    application: 
    name: app 
在我的情況

。其他所有內容都在應用程序中配置[配置文件]。陽明海運

現在一切都將按期望:

2017-03-13 15:58:21.291 INFO [app,,,] [localhost,swagger] 27519 --- [   main] com.company.app.keyserver.Application : Started Application in 17.565 seconds (JVM running for 18.232) 
+0

您正在混合我看到的所有可能的模式:P爲什麼突然間我們正在討論如何根據日誌記錄發送跨度到zipkin?它與彼此無關。如果跟蹤級別已啓用,則我們正在記錄其他文本,如「持續跨度」。 –

+0

現在不可能在該時間點添加Sleuth,因爲實際上它沒有任何意義。商業運營中應該有跟蹤。沒有任何操作。要使日誌記錄模式可用,您必須添加正在進行引導階段的配置。 –

+0

如果你想做這樣的事情,你需要完全改變日誌模式。也許最好嘗試''logback-spring.xml'這樣的方法 - https://github.com/spring-cloud-samples/sleuth-documentation-apps/blob/master/service1/src/main/resources/ logback-spring.xml#L5-L11。我正在解析應用程序名稱,所以也許你可以對活動配置文件執行相同的操作,而不需要編寫任何代碼?如果進展順利,您可以嘗試執行此操作並進行ping操作。 –

回答

2

當然 - 你只是提供自己的日誌記錄格式(例如,通過logging.pattern.level - 檢查​​獲取更多信息)。然後,你必須註冊自己的SpanLogger bean的實現,您將採取增加通過MDC彈簧輪廓的價值關懷(你可以在此看一看作爲一個例子https://github.com/spring-cloud/spring-cloud-sleuth/blob/master/spring-cloud-sleuth-core/src/main/java/org/springframework/cloud/sleuth/log/Slf4jSpanLogger.java

UPDATE:

對於更復雜的方法,另一種解決方案似乎比重寫Sleuth類更容易。您可以嘗試logback-spring.xml這種方式 - https://github.com/spring-cloud-samples/sleuth-documentation-apps/blob/master/service1/src/main/resources/logback-spring.xml#L5-L11。我正在解析應用程序名稱,所以也許你可以對活動配置文件執行相同的操作,而不需要編寫任何代碼?

+0

非常感謝@馬爾辛 - grzejszczak。我試圖按照您的指示進行操作,並通過可能會在一些細節上提供幫助的草稿更新我的問題。 – user3105453