Log4j, konfigurasyonlarında çıktı seviyesinin belirtilebilmesine izin veriyor. Buna rağmen;
isDebugEnabled()
isInfoEnabled()
isWarnEnabled()
isErrorEnabled()
isFatalEnabled()
metodlarının kullanımına da izin veriliyor. Burda aklımıza şu soru gelebilir "Seviye belirleyebilmemize rağmen bu metodlara ne gerek var?"
Bildiğimiz gibi, Unix/Linux sunucularda çalışan projelerimizin standart çıktılarını herhangi bir hedefe yönledirebiliyoruz. Bu durumda, bütün log satırları aynı anda hem log4j hedeflerine hem de standart çıktıya akmış oluyor. Normalde Log4j, ayar dosyamıza göre süzme işlemi yapacaktır fakat standart çıktıda süzme gerçekleşmeyecektir, çünkü standart çıktı, işletim sisteminin denetimindedir. Standart çıktıyı dinlediğimizde, almak istemediğimiz tüm logları da almak zorunda kalıyoruz. Bu da diskimizde kapasite sorununa yol açabilir.
Daha net anlaşılması açısından iki örnek vermek istiyorum;
Hibernate is..Enabled() metodlarına bakmaksızın log basar. Diyelim ki;
Modelin bir alanı imaj ve 10mb büyüklüğünde bir imajı bu alana yükleyip modeli kaydettiğimizde/okuduğumuzda, hibernate bu 10mb büyüklüğündeki imajı binary olarak loglar. Oysa hibernate, is..Enabled() metodlarını dikkate alarak loglama yapsaydı bu sorunu yaşamayacaktık.
pseudo kod olarak (log seviyemizi debug'un üstüne varsayarsak)
//bu değişkenin kapasitesi 10mb diyelim
byte[] stream = ...
//loglarda bu satır atlanacaktır ama standart çıktıya akacaktır
log.debug(stream)
//loglarda ve standart çıktıda bu satır atlanacaktır
if (log.isDebugEnabled()) log.debug(stream)
25 Şubat 2011 Cuma
24 Şubat 2011 Perşembe
Java dizilerin kartezyen çarpımı
Arkadaşımın ihtiyacı üzerine geliştirdiğim algoritmanın java kodları;
Çıktısı ise;
public class Hadi {
private static String[] oldies;
private static List perList = new ArrayList();
public static void main(String[] args) {
perList.add(new String[] {"ist,","ank,","adn,"});
perList.add(new String[] {"ali,","veli,","maria,","nursel,"});
perList.add(new String[] {"elma","armut"});
oldies = new String[perList.size()];
printIt(0);
}
private static void printIt(int level) {
for (int i = 0; i < perList.get(level).length; i++) {
oldies[level] = perList.get(level)[i];
if (level < perList.size() - 1) {
printIt(level + 1);
}
if (level == perList.size() - 1) {
for (int j = 0; j < oldies.length; j++) {
System.out.print(oldies[j]);
}
System.out.println();
}
}
}
}
Çıktısı ise;
ist,ali,elma
ist,ali,armut
ist,veli,elma
ist,veli,armut
ist,maria,elma
ist,maria,armut
ist,nursel,elma
ist,nursel,armut
ank,ali,elma
ank,ali,armut
ank,veli,elma
ank,veli,armut
ank,maria,elma
ank,maria,armut
ank,nursel,elma
ank,nursel,armut
adn,ali,elma
adn,ali,armut
adn,veli,elma
adn,veli,armut
adn,maria,elma
adn,maria,armut
adn,nursel,elma
adn,nursel,armut
Kaydol:
Kayıtlar (Atom)