Boost C++ için geliştirilmiş içerik
bakımından çok zengin bir kütüphaneler topluluğudur. Bu yazı
kapsamında boost kütüphanelerinden birisi olan boost.Log
kullanımına dair basit bir örnek gerçekleştirilmiştir. Log alma
işlemi, bir yazılımın gerçekleştirdiği temel işlemler
ile ilgili bazı bilgilerin dosyaya kaydedilmesidir. Böylelikle
uygulama ile ilgili birşeyler yanlış gittiğinde log dosyasındaki
veriler incelenerek uygulamanın davranışı analiz edilip gerekli
düzeltmeler yapılmasına yardımcı olunabilir. Boost.Log
kütüphanesini projemizde kullanabilmek için kaynak kodları
indirip derlememiz gerekmektedir. Bunun sebebi; Boost
kütüphanelerinden bazıları sadece header eklenerek kullanılabilir
iken, bazı kütüphanelerin kullanılması için ise kaynak kodun
derlenmesi gerekmektedir.
Boost derlenmesi gereken kütüphaneler
listesi;
Bu yazı kapsamında boost.Log
kütüphanesininin kullanımına dair basit bir örnek gerçekleştireceğiz. Bunun için ilk olarak
boost kaynak kodlarını bilgisayarımıza indiriyoruz. Daha sonra bilgisayarımızdaki Visual Studio derleyicisinin komut satırını
aşağıdaki gibi açıyoruz (x86,x64 ya da cross tool
seçenekleri mevcut) ve boost dosyalarını indirdiğimiz klasöre
yönlendiriyoruz.
Daha sonra komut satırına bootstrap
yazıyoruz ve ilgili batch dosya çalışıp aynı klasörde b2.exe
uygulaması oluşturuyor.
Akabinde ise komut satırına .\b2
yazıyoruz ve biraz zaman alacak olan derleme işlemimiz başlıyor, ve Boost C++ kütüphanelerimiz
başarıyla derlenmiş oluyor. Derleme işleminin başarıyla gerçekleştiği mesajının altındaki
mesajları da okuyacak olursanız, boost'u projenize eklediğinizde
kullanacağımız include ve library dosya yolunu da bize belirtmiş
oluyor.
Boost kaynak kodlarını başarıyla derledik ve boost_1_64_0\stage\lib klasöründe .lib dosyaları oluşturulduğunu göreceksiniz. Evet şimdi daha önce yapmış olduğum ağ paketlerini analiz eden C++ uygulamamıza, log alma
özelliği ekleyelim. Bunun için Visual Studio'da ilgili dosya
yollarını ekliyorum.
Project->Properties->C/C++-> Additional include : D:\boost_1_64_0;
Project->Properties->Linler-> Additional library : D:\boost_1_64_0\stage\lib;
Ve artık kodlamaya geçecek olursak, her zamanki gibi ilk iş projede kullanacağım header
dosyalarını belirtiyorum.
#include
<boost/log/trivial.hpp>
#include
<boost/log/utility/setup/file.hpp>
#include
<boost/log/sources/severity_logger.hpp>
Daha
sonra log verilerinin dosyaya
yazılması için, dosyaya yönlendirme ve severity seviyesi
ayarlama işlemlerini gerçekleştiriyoruz. (Yani önem derecesini
belirtiyoruz) Önem dereceleri ağaşıdaki gibi ;
BOOST_LOG_SEV(lg,
trace) << "A
trace severity message";
BOOST_LOG_SEV(lg,
debug) << "A
debug severity message";
BOOST_LOG_SEV(lg,
info) << "An
informational severity message";
BOOST_LOG_SEV(lg,
warning) << "A
warning severity message";
BOOST_LOG_SEV(lg,
error) << "An
error severity message";
BOOST_LOG_SEV(lg,
fatal) << "A
fatal severity message";
Örneğin;
trace seviyesini ayarlarsak, tüm loglar alınacak anlamına
gelirken, seviye olarak warning seçersek sadece warning,error
ve fatal etiketli loglar kaydedilecek anlamına geliyor. Bu da
istediğimiz zaman asıl ilgilenmek istediğimiz loglara
yoğunlaşabilmemize imkan sağlıyor.
int
main(int
argc,
char
**argv)
{
…...
boost::log::add_file_log("sample.log");
boost::log::core::get()->set_filter
(
boost::log::trivial::severity
>= boost::log::trivial::warning
);
Daha
önceki yazılarımda örneğini vermiş olduğum ve kaynak kodlarını
paylaştığım libpcap uygulamasına log özelliğini ekledim ve
bunun üzerine anlatımı gerçekleştireceğim. Örneğin; ağdan
okuduğumuz her bir paketin büyüklüğü ve zaman bilgisini
aşağıdaki gibi trace seviyesinde log a ekliyoruz.
Eğer
gelen paket UDP ise port bilgilerini çıkarıp info
seviyesinde log alıyoruz.
IP4 paketi olmayan paketleri ise warning seviyesinde log a ekliyoruz.
Ve
sonuç olarak info ve warning seviyelerinde ayrı ayrı uygulamamızı
çalıştırıp logları karşılaştıracak olursak; info
seviyesi için info ve warning mesajları kaydediliyor
iken warning seviyesinde info mesajları kaydedilmiyor.
Hiç yorum yok:
Yorum Gönder