C# Programda veri tabanı bazlı günlük tutmak

ressh

Kilopat
Katılım
12 Mart 2021
Mesajlar
3.549
Makaleler
2
Çözümler
46
Yer
Türkiye
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.

@300319 @IDaRKLoRD Düşünceleriniz neler? Teşekkürler şimdiden.
 
İşlemin sonunda değil de fonksiyonun en başında günlüğe yazmak daha iyi olur fikrimce.

İş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.

ATM simülasyon projem var da.
 
İşlemin sonunda değil de fonksiyonun en başında günlüğe yazmak daha iyi olur fikrimce.
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;
C#:
private static void SQLLog(bool a, bool b, bool c, bool d){
}

Hangi fonksiyondan log tutacağıma göre true yapabilirim.

Bir de bunun 1 değişkenli integer'lı hali aklıma geldi bu şekilde de switch kullanılabilir.
 
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;
C#:
private static void SQLLog(bool a, bool b, bool c, bool d){
}

Hangi fonksiyondan log tutacağıma göre true yapabilirim.

Bir de bunun 1 değişkenli integer'lı hali aklıma geldi bu şekilde de switch kullanılabilir.
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.
 
Son düzenleme:
Yapılabilir. Lakin günlükleri her işlem yapıldığında veri tabanına aktarmak mantıklı değil. Toplu şekilde, işte 5 5 aktarmak mantıklı olur.
 

Technopat Haberler

Yeni konular

Geri
Yukarı