Java kaydı için abonelik | Haberler Online

Portakalkafa

Global Mod
Global Mod
Java'nın kaydı konusunda ilk görevde en iyi uygulamaları ve çukur vakalarını girdikten sonra, harika bir projede kayıtla yüzleşmek istiyorum. Bu alanda, farklı kayıt resimleri ile uygulamanın tüm uygulamasının birleşmesi arasında genellikle sorunlar vardır.








Hendrik Advers (@hendrikebbers), JCP uzman grubunun bir üyesi olan Java'nın şampiyonu ve farklı Javaone rock yıldızı hoparlörleri aldı. Kendi açık unsurları şirketi ile Hendrik şu anda Hedera Hashgraph'ı tasarlamaya ve hizmetlerini halka açık hale getirmeye yardımcı oluyor. Hendrik aynı zamanda Juug Dortmund ve Cyberland tarafından ve tüm dünyada Java teması hakkında dersler ve seminerler düzenliyor. “Mastering JavaFx 8 Controls” adlı kitabı 2014 yılında Oracle Press tarafından yayınlandı. Hendrik, TSC Emptopenjdk ve Eclipse WG benimseyenlerin bir üyesidir.







Sorunu daha iyi anlamak için, çok basit bir örnekle başlıyorum, neredeyse kayıtta merhaba dünyası. Aşağıdaki kod, sadece bir mesajı kaydeden minimum bir Java uygulamasını gösterir:


public class HelloLogging {

private static final Logger LOG = Logger.getLogger("HelloLogging");

public static void main(final String[] args) {
LOG.info("Hello World");
}
}


Zaten bu önemsiz uygulamada, kayıt, örnekte kayıt resimlerinin özellikleri ile gerçekleştirilebilir. java.util.Logging (Temmuz), yapılandırılmış ve bir dosya veya konsolda (kabuk) çıktı. Aşağıdaki diyagram, şematik bir yapıdaki kaydın yapısını ve konfigürasyonunu göstermektedir.








Gerçekçi bir senaryo


Yapı tarihi küçük bir proje için iyi çalışırken, bazen ilk bağımlılıklar eklenir eklenmez sorunlu hale gelir. Uygulamamız için iki bağımlılığa ihtiyacımız olduğunu düşünelim: bir veritabanına erişim sağlamak için bir kütüphane ve saldırılardan önce uygulamamızı güvenli hale getirmek için bir güvenlik kütüphanesine daha fazla bağımlılık. Bu kütüphanelerin geliştiricileri de durumları, kullanımı ve çalışma zamanı hataları hakkında bilgi vermek istediklerinden, kayıtları da kullanırlar. Ancak, bu kütüphaneler java.util.LoggingAncak diğer kayıt kitaplıkları kullanılır. Aşağıdaki diyagramda görebileceğiniz gibi, Log4J2 ve Logback'in kullanımda olduğunu varsayalım.








Şimdi başvurumuzun kaydının üç farklı kayıt resmi ile yönlendirildiği sorunumuz var. Log4J ve Logback ayrıca yapılandırma için yeterli seçenekler sunar, ancak kayıt çerçevesi birbirini senkronize etmediğinden, tüm çerçevenin aynı dosyada yazılması çok aptalca bir fikir olacaktır. Burada çerçevenin birçoğu aynı çizgide yazıyor ve bu nedenle okunaksız bir metin modülü yığınına veya hatta çıkmazlara girebilir. Başka bir fikir, her çerçevenin aşağıdaki diyagramda belirtildiği gibi kendi dosyasında kaydetmesidir.








Bu yapı, günlüğe kaydetmenin birbirinden tamamen bağımsız olarak hareket ettiği ve ortaya yerleştirilemeyeceği anlamına gelir. Bu, manuel olarak veya araçların yardımıyla senkronize etmeniz gereken farklı dosyalara dağıtılan temiz bir kayıt sağlar. Ayrıca, örneğin uygulama analizi için daha yüksek bir kayıt seviyesi etkinleştirmek istiyorsanız, mevcut tüm kayıt sistemlerini yapılandırmak her zaman gerekir. Gerçek bir projeye ikiden fazla bağımlılık olan şeyleri kötüleştirmek için, kullanımda önemli ölçüde daha fazla kayıt çerçevesine yol açabiliriz.

Bir cephe kullanarak küresel kayıt


Kayıt cephelerinin yardımı. Bir cephe somut bir uygulamadan ayrılabilir. Java (SLF4J) için basit kayıt cephesi burada açıkça hüküm sürdü. SLF4J, geçişli bağımlılıklar olmadan tek bir bağımlılık olarak gelen ve neredeyse tüm sistemlere kolayca entegre edilebilen bir kayıt sunar. Bu durumda API, koddaki beton kayıt çağrılarını birleştirmek için kullanılabilir. Aşağıdaki kodda bir “merhaba dünya” kaydı örneğini göstermektedir:


import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

public class HelloLogging {

private static final Logger logger =
LoggerFactory.getLogger(HelloLogging.class);

public static void main(String[] args) {
logger.info("Hello World!");
}
}



Bu koda bakarsanız, kendinize SLF4J avantajlarının klasik Java kaydına kıyasla sunması gerektiğini sorabilirsiniz. En önemli noktalardan biri, bunun bir org.slf4j.Logger Bu bir arayüzdür. Modül slf4j-apiSLF4J-API içeren ve bu nedenle bahsedilen söz, arayüzün uygulanmasını sağlamaz. Modülün tamamı, kayıt cephesi olan SLF4J'den sadece kamu arılarını tanımlar.

Bunu kullanmak için uygulama sağlamalıyız. Bunu yapmak için, kayıt cephesinin uygulanmasını sağlayan bağımlılık olarak adlandırılan bir bağlantı. Kural olarak, bu kısıtlama kayıt olaylarını belirli bir kayıt çerçevesine iletir. Örneğin, belirli bir kayıt uygulaması olarak Apache Commons Loging'i kullanmak istiyorsanız, sadece slf4j-jcl-VERSION.jar Modülü ClassPath'e ekleyin. Bu bağlantılar derleme zamanı için gerekli değildir ve bu nedenle Maven'de çalışma zamanı kapsamı yoluyla veya sınıflarda “runtimeonly” bağımlılığı olarak belirtilebilir. SLF4J dahili olarak Java-SPI kullandığından, kodu belirli kayıt uygulamasını kullanmak için ayarlamak gerekli değildir. Şimdi bu işlevi örnek uygulamamız için kullanabiliriz:




Uygulama olarak SLF4J ve LOG4J2 kullanımı




Diyagramda, Log4J2 bir kayıt uygulaması olarak kullanılır ve uygun bir bağlantı eklenir, tüm kayıt mesajları aracılığıyla bulunan tüm kayıt mesajları org.slf4j.Logger-Logger otomatik olarak log4j2'ye iletilecektir. Bu örnekte “LIB veritabanımız LOG4J2'ye bağlı olduğundan, haberler doğrudan Log4J2 üzerinden çeşitli dahili ve harici modüller tarafından ele alındığından, özel kaydın uygulanması için saldırılara ek olarak, SLF4J ayrıca konsolda SLF4J ve mesajların minimum uygulanmasını sunan SLF4J basit kütüphanesini sunar (System.error).

Bununla birlikte, örnekte bir sorun da vardır: “Güvenlik Özgürlüğü”, LogBack'i logger olarak kullanır ve bu nedenle mesajları farklı bir sorunla sonuçlanmaya devam eder. Böylece bu durumlar için SLF4J için adaptörler kullanılabilir. Bunlar doğrudan bir SLF4J kaydına gönderilen kayıtların etkinleştirilmesi. Kayıt çerçevesine bağlı olarak, bu adaptörler için tamamen farklı uygulama yaklaşımları vardır. SLF4J bu adaptörlerden bazılarını sunarken, IE de doğrudan kayıt çerçevesine teslim edilir. Örneğin Log4J2 için, Log4J2'den SLF4J'ye iletimleri iletmek istiyorsanız aşağıdaki bağımlılığı eklemeniz gerekir:


<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-to-slf4j</artifactId>



En iyi şekilde sadece çalışma zamanına sınıf yoluna eklenen bu bağımlılığı ekleyerek, kayıt seyri aşağıdaki grafiklerde olduğu gibi oluşturulur:




SLF4J ve Log4J2




SLF4J, çeşitli kayıt kitaplıkları için web sitenizdeki saldırılar ve adaptörlerle entegrasyona iyi bir genel bakış sunar.

Şimdi örnek uygulamamızı bilgiye dayalı olarak incelersek, hedefimiz logback için bir adaptör ekleyerek elde edilebilir. Aşağıdaki diyagramda gösterildiği gibi, tüm sistemin tüm kayıtları Log4J2 üzerinden yönlendirilir ve sadece merkezi bir pozisyonu belgelememiz gereken avantajımız vardır.




Kayıt cephesinin doğru kullanımı





(RME)
 
Üst