2016-04-11 17 views
1

tarafından Spring Boot bir log4j2.xml yapılandırmasına baktığınızda ve aşağıdaki yapılandırmayı (kaldırılmış önemsiz parçaları) göreceğim:

<Property name="PID">????</Property> 
<Property name="LOG_EXCEPTION_CONVERSION_WORD">%xwEx</Property> 
<Property name="LOG_LEVEL_PATTERN">%5p</Property> 
<Property name="LOG_PATTERN"> 
    ... %clr{${LOG_LEVEL_PATTERN}} %clr{${sys:PID}}{magenta} 
    ... %m%n${sys:LOG_EXCEPTION_CONVERSION_WORD} 
</Property> 

bir bakalım: ${LOG_LEVEL_PATTERN} açık, yukarıdaki satırda tanımlanan özellik için giderir. Fakat Sonraki iki değişken açılımın sys: ön eki var, bu tam olarak ne yapıyor?

Daha önemlisi, bu değişkenlerin çözünürlüğünü (özellikle sys:) kimler yapar? Log4j2'ye özgü mi? Bu genişleme Maven veya kullanıyorum Yay Çerçevesi tarafından mı yapıldı?

cevap

1

org.apache.logging.log4j.core.lookup dosyasına bakın. Özellikle Interpolator sınıfı ve SystemPropertiesLookup sınıfı.

Interpolator sonuç o zaman bir MapLookup olan varsayılan arama, çalışacağız null ise

return System.getProperty(key); 

döndürür SystemPropertiesLookup kullanmayı dener.

if (map == null) { 
      return null; 
    } 
    return map.get(key); 

Bu harita, yapılandırmadaki özellikler bölümü tarafından tanımlanan haritadır.

TLDR

aramaları log4j2 çekirdek tarafından işlenir. İlk önce sistem özelliğini deneyecek. sistem özelliği yoksa, yapılandırmanızın özellikler bölümünde tanımlanan bir özellik arar.

İlgili konular