Bu eğitimde, örnekler yardımıyla Java Günlüğü ve çeşitli bileşenleri hakkında bilgi edineceğiz.
Java, günlüğe kaydetme işlemi aracılığıyla günlük mesajları ve dosyaları oluşturmamıza ve yakalamamıza olanak tanır.
Java'da günlük kaydı, çerçeveler ve API'ler gerektirir. Java'nın java.util.logging
pakette yerleşik bir günlükleme çerçevesi vardır .
Log4j, Logback ve daha fazlası gibi üçüncü taraf çerçevelerini günlük kaydı amacıyla da kullanabiliriz.
Java Günlük Bileşenleri
Aşağıdaki şekil, Java Logging API'nin ( java.util.logging
) temel bileşenlerini ve kontrol akışını temsil etmektedir .

1. Kaydedici
Logger
Sınıf günlüğü için yöntemler sağlar. Sınıftan nesneleri başlatabilir Logger
ve günlükleme amaçları için yöntemlerini çağırabiliriz.
Bir örnek alalım.
Logger logger = Logger.getLogger("newLoggerName");
getLogger()
Yöntemi Logger
sınıfına bulmak veya yeni oluşturmak için kullanılır Logger
. Dize argümanı, kaydedicinin adını tanımlar.
Burada, bu yeni bir Logger
nesne yaratır veya Logger
aynı isimde var olanı döndürür .
Logger
Kullanarak geçerli sınıftan sonra a tanımlamak için bir kuraldır class.getName()
.
Logger logger = Logger.getLogger(MyClass.class.getName());
Not: Bu yöntem NullPointerException
, aktarılan ad ise atar null
.
Her Logger
birinin günlük mesajının önemini belirleyen bir düzeyi vardır. 7 temel günlük seviyesi vardır:
Günlük Düzeyi (azalan sırada) | Kullanım |
---|---|
ŞİDDETLİ | ciddi başarısızlık |
UYARI | uyarı mesajı, olası bir sorun |
BİLGİ | genel çalışma zamanı bilgisi |
YAPILANDIR | yapılandırma bilgileri |
İNCE | genel geliştirici bilgileri (izleme mesajları) |
İNCE | ayrıntılı geliştirici bilgileri (izleme mesajları) |
EN GÜZEL | son derece ayrıntılı geliştirici bilgileri (izleme mesajları) |
KAPALI | tüm seviyeler için günlük kaydını kapat (hiçbir şey yakalama) |
HERŞEY | tüm seviyeler için günlük kaydını aç (her şeyi yakala) |
Her günlük düzeyinin, iki özel günlük düzeyi OFF
ve ALL
.
Mesajı günlüğe kaydetme
Varsayılan olarak, en üstteki üç günlük düzeyi her zaman günlüğe kaydedilir. Farklı bir seviye belirlemek için aşağıdaki kodu kullanabiliriz:
logger.setLevel(Level.LogLevel); // example logger.setLevel(Level.FINE);
Bu örnekte, yalnızca üzerindeki seviye FINE
ve seviyeler günlüğe kaydedilecek şekilde ayarlanmıştır. Diğer tüm günlük mesajları bırakılır.
Şimdi bir mesaj kaydetmek için log()
yöntemi kullanıyoruz.
logger.log(Level.LogLevel, "log message"); // example logger.log(Level.INFO, "This is INFO log level message");
İstenilen seviyelerde günlük kaydı için kısa yöntemler vardır.
logger.info( "This is INFO log level message"); logger.warning( "This is WARNING log level message");
Ayarlanan günlük düzeyini geçen tüm günlük istekleri daha sonra LogRecord'a iletilir .
Not: Bir günlükçünün seviyesi olarak ayarlanmışsa null
, seviyesi üstünden miras alınır ve bu şekilde ağaçta devam eder.
2. Filtreler
Bir filtre (mevcutsa), LogRecord'un iletilip iletilmeyeceğini belirler . Adından da anlaşılacağı gibi, günlük mesajlarını belirli kriterlere göre filtreler.
Bir LogRecord , belirtilen kriterleri geçerse yalnızca günlükçiden günlük işleyicisine ve günlük işleyicisinden harici sistemlere geçirilir.
// set a filter logger.setFilter(filter); // get a filter Filter filter = logger.getFilter();
3. İşleyiciler (Ekler)
Günlük işleyici veya ekleyiciler LogRecord'u alır ve çeşitli hedeflere aktarır.
Java SE, 5 yerleşik işleyici sağlar:
İşleyiciler | Kullanım |
---|---|
StreamHandler | bir OutputStream |
ConsoleHandler | konsola yazar |
FileHandler | dosyaya yazar |
SocketHandler | uzak TCP bağlantı noktalarına yazar |
MemoryHandler | hafızaya yazar |
Bir işleyici, LogRecord'u harici sistemlere iletilip iletilemeyeceğini yeniden belirlemek için bir filtreye geçirebilir.
Yeni bir işleyici eklemek için aşağıdaki kodu kullanıyoruz:
logger.addHandler(handler); // example Handler handler = new ConsoleHandler(); logger.addHandler(handler);
Bir işleyiciyi kaldırmak için aşağıdaki kodu kullanırız:
logger.removeHandler(handler); // example Handler handler = new ConsoleHandler(); logger.addHandler(handler); logger.removeHandler(handler);
Bir kaydedicinin birden çok işleyicisi olabilir. Tüm işleyicileri almak için aşağıdaki kodu kullanıyoruz:
Handler() handlers = logger.getHandlers();
4. Biçimlendiriciler
Bir işleyici , LogRecord nesnesini harici sistemlere aktarmadan önce bir dizeye formatlamak için bir Biçimlendirici de kullanabilir .
Java SE'nin iki yerleşik Biçimlendiricisi vardır :
Biçimlendiriciler | Kullanım |
---|---|
SimpleFormatter | LogRecord'u dizeye formatlar |
XMLFormatter | formatları LogRecord XML formuna |
Bir işleyiciyi biçimlendirmek için aşağıdaki kodu kullanabiliriz:
// formats to string form handler.setFormatter(new SimpleFormatter()); // formats to XML form handler.setFormatter(new XMLFormatter());
LogManager
LogManager nesne küresel günlüğü bilgilerin kaydını tutar. Günlük kaydı yapılandırmasını ve kaydedici örneklerini okur ve korur.
Günlük yöneticisi bir singleton'dur, yani bunun yalnızca bir örneğinin başlatıldığı anlamına gelir.
Günlük yöneticisi örneğini elde etmek için aşağıdaki kodu kullanıyoruz:
LogManager manager = new LogManager();
Günlük Tutmanın Avantajları
Java'da oturum açmanın avantajlarından bazıları şunlardır.
- programın akışının izlenmesine yardımcı olur
- meydana gelebilecek herhangi bir hatanın yakalanmasına yardımcı olur
- sorun teşhisi ve hata ayıklama için destek sağlar