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