Yaptığım konsol uygulamasında her işlemin veritabanında tutulmasını istiyorum. Konsol uygulamasının başlangıcında bir SqlConnection açık bırakıp yaptığım her işlemin sonunda oraya bilgileri göndersem diye düşünüyorum, farklı bir fikriniz var mı?
Aklıma günlük dosyasının log4net kütüphanesi yerel olarak oluşturulup sonra veritabanına gönderilebileceği geldi ama bana canlı günlük tutma gibi bir şey gerekiyor.
İşlemde kullanıcıdan girdi aldığım kısımlar var ondan dolayı o şekilde yazdım, dediğiniz gibi ayrı olarak fonksiyon başında fonksiyonun başladığına dair bir günlük satırı açılabilir.
Buna ek olarak watchdog process fikrini benimsemeli. Eğer bir fonksiyon başladıktan sonra process çıkış yaparsa işlem tamamlanmadan, çıkış kodunu kaydedip daha detaylı log tutmuş olur.
Watchdog process fikrini bilmiyorum, aklıma şöyle bir şey geldi şimdi. SQLLog adlı bir fonksiyon oluşturup içerisine diğer fonksiyonların adında birçok bool değişken koyarsam örneğin;
Projenizi ne kadar detaylandıracaksınız bilmiyorum ama Aspect Oriented Programming kavramını araştırabilirsiniz, methodlardan önce, method ortasında, method sonunda vb. hatta bir exception throw ettiğinde bir işlem yapılmasını sağlayan bir teknik.
İlaveten Kafka benzeri bir mesaj uygulaması ile istenen durumlarda mesaj fırlatılmasını sağlayabilir, başka bir yerdeki consumer ise mesajları dinleyerek mesaj geldiği durumda db kaydı atabilir.
Watchdog bir izleyici işlem. Asıl görevi ana işlemi takip etmek ve hata olması durumunda müdahalede bulunmak. Tüm görevi bundan ibarettir. Bu sistemi kullanabilmek için pipeları kullanmalısın, multi proccess nedir, nasıl kullanılır onu öğrenmelisin.
Watchdog proccessin kısaca senin methodlarından gelecek çıktıları takip etmeli. Bunun iki yöntemi var. Biri pipeları kullanmak, diğeri her metod için yeni bir sub-proc oluşturmak ve bunun exit code'unu takip etmek. Sub-proc oluşturmak ağır olur ama bilgin olsun. Sub proc oluşturmanın artısı, metod sırasında işlem çökerse ana işlem sağlam kalır. Eksisi daha fazla kaynak tüketir. Sub-proc oluşturduğunda da pipeları kullanmak zorundasın bu arada.
Watchdog process fikrini bilmiyorum, aklıma şöyle bir şey geldi şimdi. SQLLog adlı bir fonksiyon oluşturup içerisine diğer fonksiyonların adında birçok bool değişken koyarsam örneğin;
Mantıklı değil, ağır amelelik olur. Her yeni metodda fonksiyonun parametrelerini mi güncelleyeceksin? Ek olarak fonksiyonların hep mi bool olacak, başka hiç mi türde veri döndürmeyecekler? Ek olarak bunu planlıyorsan en azından function pointerları araştır. Unsafe ama şu fonksiyondan çok daha mantıklı olur.