Test Otomasyon Süreçlerinde Loglama | Log4J
Merhabalar, bu yazımda test otomasyon süreçlerinde log4j kullanarak nasıl loglama yapabileceğimizden bahsedeceğim. Otomasyon süreçlerin özellikle service testlerinde loglama çok önemlidir. Müşteri, analist, takım arkadaşımız yada kendimiz için tabiri caizse leziz bir loglama yapmamız önemlidir. Dediğim gibi özellikle herhangi bir arayüzü olmayan service testlerinde ekran görüntüsü yada video kaydı alamayacağımız için loglamaya çok ihtiyacımız vardır. Bu işlem için çeşitli frameworkler kullanılabilir ben elimden geldiğince Log4j anlatmaya çalışacağım.
Log4J Nedir?
Log4j Apache Software Foundation tarafından geliştirilmiş java tabanlı bir loglama kütüphanesidir. Log4j seviye bazlı bir loglama yapar ve seviyeler isteğe göre değiştirilebilir.
Log4j projeye nasıl eklenebilir?
Projeye eklemek için maven yapısını kullanacağız. Projemizdeki pom.xml içerisinine alttaki dependency eklememiz yeterli olacaktır.
<dependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
<version>1.2.17</version>
</dependency>
Bu işlem sonrasında projemizin içerisinde resources klasörünün altına log4j.properties dosyasını oluşturmalıyız.
Ekran görüntüsünde görebileceğiniz gibi log4j.properties klasörünü resources içerisine ekledik. Sırada ise bu klasörün içerisine ne gibi bilgiler eklemeliyiz onları inceleyeceğiz.
log4j.properties dosyasının içerisine üstteki bilgileri eleyebiliriz.
# Root logger option
log4j.rootLogger=INFO,HTML, stdout, file
# Redirect log messages to console
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.Target=System.out
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} %-5p %c{1}:%L - %m%n
# Redirect log messages to a log file, support file rolling.
log4j.appender.file=org.apache.log4j.RollingFileAppender
log4j.appender.file.File=./log/${current.date.time}.txt
log4j.appender.file.MaxFileSize=5MB
log4j.appender.file.MaxBackupIndex=10
log4j.appender.file.layout=org.apache.log4j.PatternLayout
log4j.appender.file.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} %-5p %c{1}:%L - %m%n
log4j.appender.LOGFILE.Append=false
# Define the file appender
log4j.appender.HTML=org.apache.log4j.FileAppender
log4j.appender.HTML.File=./log/test.html
# Define the html layout for file appender
log4j.appender.HTML.layout=org.apache.log4j.HTMLLayout
log4j.appender.HTML.layout.Title=Application logs
log4j.appender.HTML.layout.LocationInfo=true
log4j.appender.HTML.Threshold=DEBUG
Console ve log file bilgilerini vererek yazdırmak istediğimiz logları burada belirtebiliriz. Log file olarak HTML, JSON,XML gibi dosya türlerini belirtebiliriz.
Log4j için gerekli tanımlamaları yaptık sırada log4jyi nasıl proje classlarımızda kullanabileceğiz bunu görelim.
Tek bir log.java sınıfı oluşturup bunun içerisinde log metotlarını yazıp buradan çekerek de kullanabiliriz. Bu yöntem için bu yazıyı inceleyebilirsiniz. ben biraz daha basit olması için her sınıf için ayrı ekleme yapıp oradan loglama işlemlerini yapacağım. Bunun için öncelikle hangi sınıf içerisinde log4j kullanacaksak o sınıfta öncelikle log4jyi importlamamız gerekecek.
import org.apache.log4j.Logger;
Bu işlem sonrasında nesnemizi oluşturmalıyız.
private static Logger log = Logger.getLogger(ClassName.class.GetName());
Bu işlemlerden sonra Testlerden önce çalıştırdığımız @Before annotation sınıfında log4j.properties klasörünün yolunu belirtmeliyiz.
PropertyConfigurator.configure("path_to_log4j.properties");
Artık log nesnemizi bu sınıf içerisinde istediğimiz gibi kullanabiliriz. Kullanım örnekleri;
log.trace("Logger message TRACE");
log.debug("Logger message DEBUG");
log.info("Logger message INFO");
log.warn("Logger message WARM");
log.error("Logger message ERROR");
log.fatal("Logger message FATAL");
Tüm bu işlemlerden sonra artık loglama işlemlerini rahatlıkla yapabiliriz. Alttaki ekran görüntüsünde basit bir get isteği için yazdığım kodlar bulunmakta.
Bu testin çalıştırılması sonuçunda consoledaki loglar ise şu şekilde.
Artık senaryolarınız istediğiniz gibi loglama işlemleri yapabilirsiniz. System.out.println(“”); yerine log.info(“”); gibi kullanımlar ile daha anlaşılır daha renkli bir loglama yapabilirsiniz.
Başka yazılarda görüşmek üzere.