Wicket Framework ile Log4j Kullanılması

Daha önce log4j’nin genel olarak herhangibir framework üzerinde nasıl kullanılabileceğinden bahsetmiştim. Bu sefer ise özellikle Wicket Framework’ü ile daha kolay nasıl kullanılabileceğinden bahsedeceğim. Eğer genel olarak log4j’nin başka frameworkler ile kullanılması hakkında bilgi almak istiyorsanız önceki yazılara göz atabilirsiniz.

Ayrıca kodumun içinde log4j’yi daha rahat bir şekilde kullanmak için slf4j aracını kullanacağım. slf4j genel olarak java loglama araçlarının tek bir arayüzden kullanılmasını sağlayan bir araç. Hangi loglama mekanizmasını kullanacaksanız ona uygun olan slf4j kütüphanesini projenize ekleyip kullanıyorsunuz.

log4j.properties Dosyasının Ayarlanması

Wicket kullandığınız projelerde ayarlarınızın bulunduğu log4j.properties dosyası için en uygun yer, WEB-INF klasörü altındaki classes klasörüdür. Normal bir web uygulamasında classes klasörü size doğrudan gösterilmez. Classes klasörüne erişmek için WEB-INF klasörü altında yeni bir klasör yaratıyoruz ve adını classes yapıyoruz. Daha sonradan hazırladığımız log4j.properties dosyasını classes klasörünün altına kopyalıyoruz. Örnek bir log4j.properties dosyası aşağıda verilmiştir.

log4j.properties


log4j.logger.org.apache.wicket = FATAL

log4j.rootLogger = INFO, stdout, R

log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.Threshold=INFO
log4j.appender.stdout.layout.ConversionPattern=%-5p (%d{dd.MMM.yyyy - HH:MM:ss}) [%c{2}] - %m%n

log4j.appender.R=org.apache.log4j.RollingFileAppender
log4j.appender.R.File= Application.log

log4j.appender.R.MaxFileSize=10000KB
log4j.appender.R.MaxBackupIndex=10
log4j.appender.R.Threshold=INFO
log4j.appender.R.layout=org.apache.log4j.PatternLayout
log4j.appender.R.layout.ConversionPattern=%-5p (%d{dd.MMM.yyyy - HH:MM:ss}) [%c{2}] - %m%n

Bu örneğimizde kullandığımız log4j.properties dosyasının en büyük farkı ilk satırdaki ” log4j.logger.org.apache.wicket = FATAL” yazısı. Bu satır size wicket framework’ünün ürettiği loglardan büyük ölçüde kurtaracaktır. Eğer wicket loglarınıda görmek istiyorsanız bu satırı silebilir ya da levelini FATAL‘dan daha aşağıya çekebilirsiniz. Fakat her http çağrısı için log ürettiğini göz önüne alırsanız ve serileştirme işlemlerinden çıkan hataları bile ekrana bastığını düşünürseniz bence wicket loglarını olabildiğince kapatmalısınız.

İşlemleri doğru olarak yaptıysanız sonuçta yandakine benzer bir dosya yapısına sahip olacaksınız.

SLF4j İle Java Tarafında Kullanımı

SLF4j’in kullanırken öncelikle hangi SLF4j kütphanelerinin seçilmesi gerektiğine bakalım. Ben log4j kütüphanesi olarak “log4j-1.2.16.jar” kullanıyorum. Bu demek oluyor ki SLF4j kütüphanemi seçerkende log4j’ime uygun olanı seçmeliyim. Benim log4j kütüphaneme uygun olanı “slf4j-log4j12-1.6.2.jar” oluyor. Adına dikkat ederseniz *log4j12* log4j-1.2’ye karşılık geldiğini görebilirsiniz. Ayrıca buna uygun olan SLF4j apisinide eklemem gerekiyor. Oda şu kütüphane oluyor “slf4j-api-1.6.2.jar”. Yani toplamda üç adet kütüphane eklemiş oluyoruz.

Bunuda bu şekilde WEB-INF klasörünün aptındaki lib klasörüne yani Web App Libraries altına ekledikten sonra java tarafında yapacağımız işlemlere geçiyoruz. Bu kısım en basiti, neredeyse normal şekilde log4j kullanır gibi kullanıyoruz.

MyClass.java


....

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

public class MyClass{

private static Logger LOG = LoggerFactory.getLogger(MyClass.class
.getSimpleName());

....

//LOG.info("info"); LOG.error("error"); etc..

// Şeklinde kullanıyoruz

}

Burdan sonra kodumuzu derleyip çalıştırdığımızda sorunsuz çalışması gerekiyor.

Dikkat Edilmesi Gerekenler

  • Öncelikle kendi ihtiyaçlarınıza yönelik loglar almak için log4j.properties dosyasını kendiniz oluşturun. Nasıl oluşturulması gerektiği ve nelere dikkat edilmesi gerektiği önceki yazımda mevcut.
  • Projenizde birden fazla log4j kütüphanesi olmamasına dikkat edin.
  • Tomcat altında slf4j ya da log4j kütüphaneleri bulunmamasına dikkat edin. Aksi halde class not found tarzı bir hata alabilirsiniz.
  • Eğer projenizdeki başka araçlar da loglama için aynı yapıyı kullanıyorsa, onlardan gelen mesajlarıda görebilirsiniz. Benim projemde jasperreports’tan gelen logları bile görüyorum. Ki yanılmıyorsam jasperreports commans-logging kütüphanesini kullanıyor. Başka araçlardan gelen logları wicketta kullandığımıza benzer şekilde bir yapıyla kesebilirsiniz.

End Of Line