Hata günlüğü / uygulama bazında ele?

4 Cevap php

Biz uygulamaların bir dizi başlatmak üzereyiz bir web sunucusu var. Sunucu düzeyinde bir veritabanı / memcached sunucusu durumunda sorumlu aşağı gidiyor kişiyi haberdar Hyperic yardımı ile işleme hatayı çalışmak başardılar.

Ancak, bu nihai hata işleme ihtiyacı hala ve application level müşteriler fark etmeden, müşterilerimiz için uygulamalar geliştirmek için gerçekleşmesi olayları günlüğe.

So, what's then a good solution to do this?
Utilizing PHP:s own error log would quickly become cloggered if we would run a big number of applications at the same time. It's probably isn't the best option if you like structure.

One idea is to build a off-site lightweight error-handling application that has a REST/JSON API that receives encrypted and serialized arrays of error messages and stores them into a database. Maybe it could, depending on the severity of the error also be directly inputted into our bug tracker.
Could be a few well spent hours, but it seems like a quite fragile solution and I am sure that there's better more-reliable alternatives out there already.

Teşekkürler,

4 Cevap

Neden PHP'nin kendi hatalar.log kullanarak hızlı 'cloggered' olacak? Her şey iyi giderse çok sayıda hata, doğru görmezsiniz?

Bana sorarsan sadece hata raporlama için bir API kullanarak ayrı bir uygulama, özellikle bir, bina hata günlüğü için başarısızlık olası puan bir çok ekler. Belki hata pano bir tür onları görüntülemek edebilmek için farklı uygulamalar için çeşitli sunucularda mevcut hata günlüklerini / denetleyen bir uygulama inşa edebileceğini, öylesine şeyler gerçekten yanlış gidiyor zaman görebilirsiniz.

Ama diğerleri de önerebiliriz görmek için ilgileniyorum, ben kendim için henüz çok o konuda düşünce değil.

Biz aslında tail -f sunucunun php hata, çeşitli çıkışlar için günlük değil, aynı zamanda kendimizi atmak istisnalar bir sürü yakalamak. Özel bir istisna atarak, (tabii ki önceliği temelinde) o olabilir sizin veritabanı, bir günlük akışı, sizin hata izci ve / veya bu-sorumlu-için-bu-posta modülü için yazıyorum. Istisnanın neden tabii ki (örneğin, var_export() / serialize() func_get_args() Bir istisna attı yöntemi içeri durum iletisi olun giriş yapmalıdır huge, sizi kurtaracak beri.

Buna ek olarak, kullandığımız Zend_Log burada istisnalar (yöntemine verilen argüman kalktı olmalıdır eğer, örneğin, biz debug_backtrace() görmek için. Bu pahalı aramaların vb grafikler yapmak programlarına uzun olabilir, ama bu bir sidenote var :)

Benim en uç: know where your application could fail and where it can not, bu hata aramak için çok daha kolay. Harici hizmetlere dayalı yükseltilmiş emin hataları yapmak gibi yorumlanır.

... Ve dürüst olmak gerekirse, ben bu tür düşünce (. App düzeyinde Error-API/-Service) biraz garip olduğunu düşünüyorum: bunu işlemek için tam olarak nasıl biliyordu eğer nasıl bir hata önleyebilir? Eğer kaçmak olmaz / onu otomatik hale?

Sen set_exception_handler kullanabilir ve set_error_handler daha spesifik bilgi toplamak ve 'cloggering' hafifletmek bir şekilde rapor etmek. Bir hata ayrıştırma komut dosyası, vs ile kolay işlenmesi için izin kendi kodlarını tanıtmak, her bir müşteri ya da uygulama için farklı dosyalar yapabilirdi

Ben hata işleme işlemine ekstra kodunu veya altyapısını tanıtan hakkında dikkatli olurdum. Bu, sizin olsun bilgi güven böylece süper sağlam olması gerekir. Veritabanına doğrudan hataları raporlama? Ne veritabanı bağlantı hataları hakkında? (Ve ve üzerinde)

Ne arıyorsanız PHPs hata işleme işlevleri şunlardır: http://de.php.net/manual/en/ref.errorfunc.php

Özellikle ilginç set_error_handler olurdu () tamamen PHPs iç hata işleyicisi geçersiz kılmak için izin verdiğini.

O ile uygulama başına kendi günlükleri yapabilirsiniz / yöneticileri e-posta göndermek / hatasıyla bir db bilgileri kaydetmek / bir yönetici tebliğ ya da her neyse olduğunu söyleyin.

Doğru veya yanlış dönen biri tarafından da wether Phps kontrol edebilirsiniz iç hata işleyicisi, işlev ya da sonra değil koşmak gerekir.