Log4j nedir?
ne işe yarar?
neler yapılır?
Log4j nedir?
log4j Apache Software Foundation'un geliştridiği bir loglama kütüphanesidir. Bu kütüphane içinde hazır api'ler bulundurur ve bunları kullanarak yazdığınız kodun ürettiği işlemleri kaydeder. Özellikle konsola çıktı veren kod yazıyorsanız daha sonra kodu temizlemek sizi uğraştırıyorsa log4j kullanmanızda fayda var. Yalnız JAVA5 (1,5) ile log4j ye benzer bir kütüphane java'ya dahil edildi. log4j nin .NET C++ PHP için olanı da var.
Log4j özellikle Apache'nin uygulamalarını kullanıyorsanız çok işinize yarayacaktır. Apache nin projelerinin büyük bir kısmına log4j.properties dosyasınıın yerini verdiğiniz takdir de uygulamaların yaptığı tüm işlemleri görebilirsiniz. Log4j properties dosyasına database yolu vererek log4j nin logları veritabanınıza yazmasını sağlayabilirsiniz. Bu dosyaya backup parametresini verip log dosyasının yedeğini almasınıda sağlayabilirsiniz.
Apache Chainsaw editörü ile bu log dosyalarını düzenlemeniz mümkün.
Şimdi gelelim örnek uygulamamıza.
Gerekli materyaller.
- Bir adet log4j kütüphanesi http://logging.apache.org/
- Bir adet netbeans www.netbeans.org
Netbeans de iucoders diye bir proje actım. Şimdi log4j jar dosyasını projemizin library kısmına sağ tık yapıp "add jar" deyip ekleyin.
projemizin en üst dizinine yani "default package" olan kısmına log4j.properties diye bir dosya oluşturun. Bunun içine şunları yazın
----------------------.
log4j.rootLogger=info, A1
log4j.appender.A1=org.apache.log4j.ConsoleAppender
#kosola çıktı vereceğimizi söylüyoruz dbye girmek istersek o zaman JDBC kütüphanesini yazarız.
log4j.appender.A1.layout=org.apache.log4j.PatternLayout
# yazım şeklini belirtiyoruz
log4j.appender.A1.layout.ConversionPattern=%-4r [%d] [%t] %-5p %c %x - %m%n
#çıktı formatı
log4j.logger.org.apache.commons.digester=INFO
#log tipi DEBUG WARN vs... olabilir
---------------------
%d: zaman. %d{HH:mm:ss,SSS} %d{dd MMM yyyy HH:mm:ss,SSS} gibi.
%m: loglanan mesaj.
%p: log eventinin önceliği.
%r: loglama esnasına kadar geçen süre.
%t: loglama eventinin thread'ı.
%n: yeni satır.
Gelelim kodumuza
package iucoders;
import org.apache.log4j.Logger;
public class Main {
public Main() {
}
static Logger log = Logger.getRootLogger();
//static Logger log =Logger.getLogger("iucoders.Main");
public static void main(String[] args) {
log.info("for döngüsü giriş");
for(int i=0;i<10;i++){
try{
Integer.parseInt("test"+i);
}catch(Exception e){
log.warn(e);
}
}
log.info("for döngüsü çıkış");
}
}
Bunun şöyle bir çıkışı olcak
0 [2006-03-05 17:22:47,390] [main] INFO root - for döngüsü giriş
16 [2006-03-05 17:22:47,406] [main] WARN root - java.lang.NumberFormatException: For input string: "test0"
16 [2006-03-05 17:22:47,406] [main] WARN root - java.lang.NumberFormatException: For input string: "test1"
...................
31 [2006-03-05 17:22:47,421] [main] INFO root - for döngüsü çıkış