"En İyi Günlük Sınıfı" isminizi okudum ve dikkatimi çekti. "En iyi" seviyesi oldukça yüksek, bu yüzden bunu kontrol etmeyi merak ettim. Hoşgörülü olmayı gerektiren serbestçe dağıtılan bir kod olduğu için ayrıntılardan bahsetmekten kaçınacağım.
Kullanım ve özellikler :
- Gizli anahtar kelimeler fikriniz iyi. Uygulama zayıf olsa da (Aşağıya bakınız). Ve çok fazla mesajı susturacaktır, örneğin logging kullanıyorsam. AddSilentKeyword("start") kullanıyorsam, "started" veya "starting" kullanarak bir günlüğü filtreleyecektir, ki bu gerçekten bir "anahtar kelime" filtrelemesinden beklediğim şey değildir.
- Geri kalanlar çok temel özelliklerdir. Örneğin, MQL'in çekirdeği olay güdümlü olduğu için, OnTick(), OnTimer() veya OnChartEvent() içine yerleştirilen bir Log() ile kolayca gerçekleşebilen, günlüğün tekrarlanan aynı girişle dolmasını önlemek bir günlük sistemi için bir zorunluluktur.
Kodlama açısından bakıldığında :
- Yapıcınız ve Initialize() kodunuz temel kısımlar için yinelenen kodlardır.
- IsMessageSilent() fonksiyonunuz m_silent_keywords[]'ün her kelimesi için bir döngü kontrolü kullanıyor ve bu döngü içinde 'anahtar kelimeleri' küçük harfe dönüştürüyorsunuz. Her günlükte! Bu gerçekten verimsiz.
- Sınıfınız neredeyse hiç özelleştirilemiyor, örneğin günlüğü ""Dosya Adı: " + __FILE__ + "\n" için özelleştirmek istersem, kodunuzu değiştirmem veya bir sınıf türetmem ve Log() yöntemini tamamen yeniden yazmam gerekecek. Örneğin bir BIN dosyası kullanmak gibi herhangi bir özel değişiklik için de aynı sorun vardır.
- MQL yerleşik makrosunu geçersiz kılacak bir Print() makrosu tanımlarsınız. Kütüphanenizin kullanıcısını günlüğünüzde Print() yapmaya zorlamak çok kötü bir fikirdir.
Sonuç :
Kütüphaneniz doğru bir temel Loglama kütüphanesidir. Bazı yeni başlayanlar veya kendi kütüphanelerini oluşturacak zamanı olmayan kodlayıcılar için kullanışlı olabilir ve onlara kullanımı kolay bazı loglama özellikleri sağlar.
Hiçbir şekilde, "En iyi" nitelemesini kullanmak haklı değildir. Özellikler doğru ancak temeldir ve uygulama amatörce düzeydedir.
Sonuç :
Kütüphaneniz doğru bir temel Loglama kütüphanesidir. Bazı yeni başlayanlar veya kendi kütüphanelerini oluşturacak zamanı olmayan kodlayıcılar için kullanışlı olabilir ve onlara kullanımı kolay bazı loglama özellikleri sağlar.
Hiçbir şekilde, "En iyi" niteleyicisini kullanmak haklı değildir. Özellikler doğru ancak temeldir ve uygulama amatörce düzeydedir.
Beklentilerinize kıyasla "en iyi" ifadesinin abartılı olabileceğinin farkındayım. Amacım herkes tarafından kolayca değiştirilebilecek ve anlaşılabilecek bir kod paylaşmaktı. Bununla birlikte, topluluğa küçük bir katkıda bulunduğumu ve sınıfın herkesin kullanımına açık olduğunu umuyorum. Yakında kodu önerdiğiniz şekilde optimize etmeye devam edeceğim.
Geri bildiriminiz için tekrar teşekkürler.
2024.09.01 14:51:25.011 Logging (EURUSD,M30) File Name: Logging.mqh Function: string CDebugLogger::FormatLogEntry(LogLevel,string) 2024.09.01 14:51 Line: 276 [INFO] Script started successfully.
Günlük çağrısının gerçekleştiği dosya adını, işlev imzasını ve satır numarasını yayabilmek için sınıf yöntemi yerine MACROS kullanmanız gerektiğini düşünüyorum.
Sonuç :
Kütüphaneniz doğru bir temel Loglama kütüphanesidir. Bazı yeni başlayanlar veya kendi kütüphanelerini oluşturacak zamanı olmayan kodlayıcılar için kullanışlı olabilir ve onlara kullanımı kolay bazı loglama özellikleri sağlayabilir.
Hiçbir şekilde, "En iyi" niteleyicisini kullanmak haklı değildir. Özellikler doğru ancak temeldir ve uygulama amatörce düzeydedir.
Tek tek kelimeleri susturma becerisine gelince, etkili bir yolun, bir boşluk veya başka bir karakter de dahil olmak üzere basitçe 'start' yazmak olduğuna inanıyorum. Nihayetinde, diğer dillerde olduğu gibi, günlükleri yapılandırmak Init'te yapılırsa mantıklıdır. Belirtildiği gibi, herkes tarafından kolayca benimsenebilmesi için basit olması gerekir. Eklenmesi gereken başka bir şey olduğunu düşünüyorsanız, yazmaktan çekinmeyin, zamanım olduğunda kodu eklemeye çalışacağım. 'Yazdır' işlevi ile ilgili olarak, herkes isterse yorum yapmakta özgürdür.
Her türlü değişiklik için hazırım!
Geri kalanlar çok temel özelliklerdir. Örneğin, MQL'in çekirdeği olay güdümlü olduğundan, OnTick(), OnTimer() veya OnChartEvent() içine yerleştirilen bir Log() ile kolayca gerçekleşebilen, günlüğün tekrarlanan aynı girişle dolmasını önlemek için bir günlük sistemi şarttır.
Bu sorun nasıl çözülür?
Cevabınız için teşekkür ederim. Şu anda günlükleri yazdırmak için MQL Plus Enhanced Debugging Support kütüphanenizi kullanıyorum. Ancak, bazen çok sayıda tekrarlayan günlük yazdırıyor ve şu anda bu sorunu çözmek için bir yöntemim yok. Önerdiğiniz çözüm bir yaklaşım ve zamanım olduğunda deneyeceğim. Günlük tutma sisteminin dikkatli bir şekilde tasarlanmasını gerektiriyor.
Cevabınız için teşekkür ederim. Şu anda günlükleri yazdırmak için MQL Plus Enhanced Debugging Support kütüphanenizi kullanıyorum. Ancak, bazen çok sayıda tekrarlayan günlük yazdırıyor ve şu anda bu sorunu çözmek için bir yöntemim yok. Önerdiğiniz çözüm bir yaklaşım ve zamanım olduğunda deneyeceğim. Kayıt sisteminin dikkatli bir şekilde tasarlanmasını gerektirir.
- Ücretsiz alım-satım uygulamaları
- İşlem kopyalama için 8.000'den fazla sinyal
- Finansal piyasaları keşfetmek için ekonomik haberler
Gizlilik ve Veri Koruma Politikasını ve MQL5.com Kullanım Şartlarını kabul edersiniz
Logging Class for both MQL4 and MQL5:
CDebugLogger sınıfı, MQL4/5 ortamlarında kullanılmak üzere tasarlanmış esnek ve kapsamlı bir günlük tutma aracıdır. Geliştiricilerin çeşitli önem düzeylerindeki (INFO, WARNING, ERROR, DEBUG) mesajları, zaman damgalarını, işlev imzalarını, dosya adlarını ve satır numaralarını günlük girdilerine dahil etme seçenekleriyle birlikte günlüğe kaydetmelerine olanak tanır. Sınıf, günlükleri ortak bir klasöre ve CSV biçiminde kaydetme özelliğiyle hem konsola hem de dosyalara günlüğe kaydetmeyi destekler. Ayrıca, hassas bilgilerin günlüğe kaydedilmemesini sağlamak için belirli anahtar kelimelere dayalı günlükleri susturma işlevi sunar. Bu sınıf, çok çeşitli hata ayıklama ve izleme ihtiyaçlarını karşılayan özelleştirilebilir özelliklerle MQL4/5 uygulamalarında sağlam günlük mekanizmaları uygulamak isteyen geliştiriciler için idealdir.
Author: VitalDefender Inc.