PHP bir üretim siteden hataları almak için en iyi yolu nedir?

3 Cevap php

Çoğu üretim siteleri için, en kısa sürede bir hata olmuştur bilmek istiyorum. Benim sorum bu bilgileri almak için nasıl en iyisidir.

Ben farklı sunucularda 20 veya daha fazla üretim sahalarını beri bu imkansız olurdu - Genellikle, ben her gün oturup bir hata kadar hata günlükleri izlemek için gitmiyorum gibi bir e-posta hataları almak için muhtemelen en iyisidir. Bu hatalar tanımsız değişkenler, alınan geçersiz veri veya sorgu hataları da dahil olmak üzere herhangi bir şey olabilir.

Şu anda ben PHPs websites, found here üzerine örnek izlemiştir. Sonuç olarak, daha sonra e-posta ile gönderilen bir XML dosyası ile birlikte bir metin dizesi oluşturur. Ben script sonlanana kadar tüm hataları tutmak için biraz bu değiştirilmiş ve bağlı XML dosyaları ile bir e-posta var. (Çünkü bir döngüde bir hata üzerinde> 500 000 e-posta göndererek bir kaç posta sunucuları çöktü.) Çoğu zaman bu mükemmel çalışıyor. (Ben de hata işleme hepsini yapmak için bir nesne oluşturduk.)

Verilerin büyük miktarda wddx_serialize_value() PROSESİ için olduğunda ortaya çıkmaktadır. Birden fazla hata varsa Ve sonra, sonra, gerçekten çok fazla bellek kullanarak biter, komut daha çoğu zaman kullanmak için izin verilir.

Bu nedenle, ben değişkeni içinde saklamadan önce gzcompress() XML dosyasına bir ek ekledik. Bu yardımcı olur, ancak veri miktarı çok büyükse, yine de bellek çalışır. (Son durumda 2GB çevresinde kullanmak istedim.)

Ben bu var ne diğer çözümleri merak ediyorum ya da nasıl çalışması yapmak için bu değiştirdiniz?

Bu yüzden birkaç gereksinimleri:

  • (böylece ben mobil zaman denetlemek ve acil bir mesele olmadığını belirleyebilirsiniz) bana sadece hata iletisi daha göndermek ve bana ne olduğunu anlamaya sunucuya giriş yapmak olmamalıdır gerekir
  • gönderilen e-postaların sayısına bir sınır olması gerekir. Iyi yine 1'dir.
  • normal başına günlük dosyasında gerekiyor

Edit: Ben hata ile ilgili diğer bilgileri, sadece hata dizesi gerekir. Genellikle ben ben daha fazla bilgi almak sürece bilmiyorum kullanıcı girişi, neden çünkü o hatayı yeniden imkansız yakın olduğunu bulmak. Ben bilgilendirici hataları koymak için elimden geleni denedim, ama bir kullanıcı sistemi ya da ne bok veri onlar nedenle içeri koymak için gidiyoruz kullanmak nasıl oluyor asla bilemezsiniz, ben sadece hata metin / dize daha fazla ihtiyacımız var.

Tüm ben veritabanı olmayabilir çünkü biliyoruz Edit 2: veritabanına hataları oturum açılamıyor. Hemen hemen çalıştırmak için garantili bir şey gerekir. Ayrıca, web siteleri 1 sunucusundaki tüm değildir ve sık sık sunucu (aptal hosting şirketleri) üzerinde cron erişimi yok.

3 Cevap

Bunun yerine özel bir hata işleyicisi ayar, ben hataları her zamanki gibi hata günlüğüne gidelim. Değişti ise, sadece değişiklikleri bana bir e-posta gönderir - Ben hata günlüğünde değişiklikleri periyodik olarak çalışır ve izleyen bir cron kurmak. Siz bu süreci geliştirmek ve ihtiyaçlarınızı daha iyi uyacak şekilde değişiklikler ayrıştırmak - örneğin (örneğin yukarıda E_WARNING gibi) belli bir seviyenin üzerinde size yalnızca hataları gönderin.

Bir yaklaşım, yani hatalar yapılıyor üzerinde kontrole sahip olmak, uygulamanızda uygun istisna yönetim olabilir.

Her kaldırdı istisna bir veritabanında hata ayrıntılarını oturum olacak.

Ardından, hata veritabanı arama için tüm web siteleri için belki sadece bir tane küçük bir uygulama kod olabilir.

That way you avoid large unreadable log files, because everything is indexed and quickly searchable. When your database gets too large, you can truncate your log tables via cron jobs.

Ben geçmişte kullanılan tek şey epylog, bu Python ile yazılmış çok esnek bir günlük izleme uygulaması olduğunu. Sen hata günlükleri izlemek için kurmak ve size e-postayla bir günlük özet hataları (ya da bunların parçaları) içerebilir.

Ben sunucu üzerinde düz bir dosyada daha ayrıntılı hata veri depolama ve size günlüğünü kontrol etmek için size bir e-posta göndererek doğru eğilmek istiyorum. Değişiklikler için hata dizini veya dosyaları izler ve bir oran sınır kümesi olan bir cron işi koşu uygulama üzerinde etkisini en aza indirmek için iyi bir yol olurdu.