Nasıl Log Tutarım?

Merhaba python ile programlama yaparken hatalarımı yakalamak için log tutmak istiyorum. Bunun için fikirlerinizi alabilir miyim? Ne yapabilirim? Nasıl yapabilirim? Farklı fikir ve görüş önerilerine açığım. Yardımcı olursanız sevinirim.

Not = programın çalışırken verdiği hataları yakalamak ya da kullanıcıların yaptığı işlemleri kayıt etmek için bu tarz bir şey istiyorum.

Şimdiden teşekkürler.

Merhaba ThomasHobbes

Log tutmak benim çok sevdiğim bir şey. Dediğin gibi hata yakalamakta ve kullanıcıların yaptıkları işlemlerin kayıtlarını tutmakta kullanıyorum. Ki bu bence bir programcının en çok ihtiyaç duyduğu şeylerden biri.

Örneğin bir program yazdın ve bunu kullanan bir firma bünyesinde önemli dosyaların silindiğini veya değiştiği durumlarda log kayıtlarından bunu takip ederek gerekli çözümleri uygulayıp kurtarma operasyonu yapabilirsin. Veya keylogger :slight_smile: yazabilirsin.

Şimdilik iyi şeyler düşünelim.

ben 2 farklı şekilde log kayıtları tutuyorum bunlardan birincisi python da bulunan dosya açma okuma işlemleri ile diğeri de sqlite ile. Tabi bunların dışında daha gelişmiş yapılar da illa ki vardır. Ben kendi bildiğim kadarıyla basit, ilkel ve işini sade şekilde görebilecek bir yapıyı anlatacağım.

.txt dosyalarında log tutacağım zaman ihtiyacım olan en önemli şey datetime.now() bunu kullanabilmek için programa şu şekilde import ediyorum >> from datetime import datetime daha sonra txt dosyalarını oluşturmak için şu şekilde bir yol izliyorum.

logdata = open("logdata.txt","r+",encoding="utf-8")
logdata.write("| İŞLEM ZAMANI >> {} | İŞLEMİ YAPAN >> {} | YAPILAN İŞLEM >> {} |".format(datetime.now(),username,user_operation))
logdata.close()

Bu şekilde bir log tuttuğum zaman sistemde o an aktif olarak işlem yapan kullanıcı adıyla yapılan işlemin ne zaman yapıldığına ve işlemin ne olduğuna dair kayıtları oluşturmuş oluyor. Bunu bir fonksiyona atayarak çalışmasını istediğin her bölümde o fonksiyonu çağırıp. Yapılan her işlemi kontrol edebilirsin.

.format() içerisinde yer alan değişkenler programda tanımlanmış şeylerdir. Sen kendi tarzınla da nasıl yapıyorsan oraları o değişkenler ile doldurabilirsin. Benimki sadece bir örnek sen istediğin kadar detaylandırıp değiştireblirsin.

Kendi tuttuğum bir txt dosyasını göstereyim size.

Aynı sistemi eğer eğitimini aldıysan aşinalığın veya bilgin varsa sqlite üzerinden de yapabilirsin.

Hatta onun içinde bir örnek görsel paylaşayım.

Bu şekilde bir fikir oluşsun aklınızda. Sorunuz olursa seve seve yardımcı olmaya çalışırım. log tutmak benim de sevdiğim bir şey

4 Beğeni

Bu hatalar yükseldiğinde zaten program duruyor ve hata ekrana yazılıyor. Log tutmak belirli yerlerde bazı bilgileri not almak gibi bir şey.

Standart kütüphanede logging modülü var.

3 Beğeni

pycharm da yazıyor alt kısımda evet ama masaüstü çalışan pencereli bir program yazdığım da bir de pyinstaller falan varya hani onla yapınca arkada hatanın yazacağı bir sistem olmuyor ya ondan böyle bir şeyi sordum.

@tevhidulvahset merhaba, cevabınız için sağolun daha gelişmiş şeylere örnek verebilir misiniz? Bir de fonksiyon olarak nasıl tanımlayacağım ona da örnek verebilir misiniz? Teşekkürler.

Oluyor, geliştirme aşamasında dosyanın uzantısını .pyw yapmazsanız hatalar konsola yazılacaktır.

1 Beğeni

hımm bi deneyeyim bunu

Loglar insanlar tarafından okunmak için tutuluyor, bilgisayar tarafından kullanılmak için değil. Özel bir durum olmadığı sürece database kullanmak anlamsız.

1 Beğeni

kusura bakmayın sadece varlığına inandığım bir şey bu. Bilgim olmadığı için yorum yapmam uygun olmaz.

elbette hemen yardımcı olayım

def log(username,user_operation):
    logdata = open("logdata.txt","a+",encoding="utf-8")
    logdata.write("| İŞLEM ZAMANI >> {} | İŞLEMİ YAPAN >> {} | YAPILAN İŞLEM >> {} 
    |".format(datetime.now(),username,user_operation))
    logdata.close()

programın istediğiniz yerinde (değişkenler aynı olmak koşulu ile) log(username,user_operation) fonksiyonunu çalıştırdığınız durumda dosya kaydını yapabilirsiniz.

1 Beğeni

fonksiyon kısmını da anladım tamamdır çok teşekkürler bunlar benim işimi görür. Farklı bir şey daha sorayım. Alttaki fotoğrafta olan yazılarımı göstermeyi nasıl yaptınız?

göstermek istediğiniz mesajın üzerini fare ile seçin sonra alıntı diye bir şey çıkacak seçtiğiniz mesaj üzerinde ona bastığınız da işlem gerçekleşir

2 Beğeni

Discourse forumlarında postlarınızı formatlamayı öğrenmek için de bu linkleri inceleyebilirsiniz:

1 Beğeni

Dogrusu @EkremDincel’in bahsettigi logging modulunu kullanmak:

import logging

def main():
	logging.basicConfig(level=logging.DEBUG)

	logging.info("Started")
	foo(42)
	Bar().baz("foo", "bar")

def foo(x):
	logger = logging.getLogger("foo")
	logger.debug("x is %d", x)

class Bar:
	def __init__(self):
		self.logger = logging.getLogger("Bar")

	def baz(self, x, y):
		self.logger.debug("baz(%s, %s)", x, y)

if __name__ == '__main__':
	main()
3 Beğeni

Bir kaç ekleme yapayım. Programda karşılaşacak hataları dilerseniz log dosyasına da ekleyebilirsiniz. Aşağıdaki kod hata vermeden çalışıyormuş gibi görünebilir. Ancak hata log.log dosyasına yazılır.

import sys
import logging

logging.basicConfig(
    filename="log.log",
    format="- %(levelname)s - %(asctime)s - %(message)s",
    level=logging.INFO,
    datefmt="%d.%m.%Y %H:%M:%S"
)
logging.info(msg="Session started.")


def excepthook(exc_type, exc_value, exc_traceback):
    logging.error(
        msg="Hata yakaladı:",
        exc_info=(exc_type, exc_value, exc_traceback)
    )


sys.excepthook = excepthook
print(2 / 0)
2 Beğeni