2012-12-14 11 views
5

Bir Java uygulamasında commons logging kullanıyorum ve istisnayı yığın izlemeden günlüğe kaydetmek istiyorum.Java'da commons.logging kullanarak bir istisna günlüğe kaydediliyor mu?

catch(IOException exception) { 
    logger.error("IOException Occured :", exception.fillInStackTrace()); 

     //Print the entire stack trace to log file. 
     throw new AsExceptionUtl(APPMessageHelper.getMessage(APPMessageConstants.ERROR_FailedLoadFile, documentPath)); 
    } 

Bunun doğru yol var mı? Ve stacktrace'i günlükte basacak mı? Eğer durum oturum istiyorsanız

cevap

4

, o zaman sadece yığın izleme görüntülenir olsun

logger.error("IOException Occured :", exception); 

kullanıp kullanmayacağına temel günlük uygulamasıdır ne olduğuna bağlıdır ve nasıl yapılandırıldığını. AFAIK, çoğu veya tüm uygulamalar, istisnaların yığın izlemesini varsayılan olarak gösterir.

+0

+1 yığın izini gerektiği gibi doldurulur ve yığın izini değiştirmek istemediğiniz sürece bunu açıkça çağırmak için iyi bir neden düşünemiyorum (ki bu benim kitaplığımdan birinde yapmıştım ancak bunu yapar Genel olarak iyi bir fikir :) –

+0

@ peter-lawrey @ jb-nizet Ne olacağım 'exception.fillInStackTrace()' da benim durumumda. –

+2

Hiçbir şey, Throwable kurucusu zaten fillInStackTrace() çağırır. Yığın izi varsayılan olarak var. Endişelenme. –

2

Apache commons günlüğü açıkladı: Bu konuda internette fazla belge bulunmamaktadır. Bu, sizin yararınıza küçük bir makale:

Mesajları java kodunuza kaydetmek için kaynak kodunuza iki sınıf almanız gerekir.

Şimdi
import org.apache.commons.logging.Log; 
import org.apache.commons.logging.LogFactory; 

, sizin günlüğü oluşturmak için, iki yoldan birini kullanarak sınıfta bir özellik oluşturur:

private Log m_log = LogFactory.getLog(MyClass.class); 

veya

private Log m_log = LogFactory.getLog("MyClassLogger"); 

Birinci seçenek sadece jenerik logger yaratıyor Varsayılan kayıt seçenekleri tarafından kontrol edilecek olan sınıfınız için. İkinci seçenek, individually MyClassLogger ’adını verdiğiniz, varsayılan olarak ayrı ayrı kontrol edilebilen belirli bir kayıt cihazı oluşturuyor. Günlüğü kullanan diğer üçüncü taraf kaynak kodlarını kullanırsanız, ancak bu kaynak koddaki hata ayıklamalarını veya diğer bilgileri görmek istemiyorsanız bunu yapmak isteyebilirsiniz. Kaydediciyi kullanmak oldukça basittir. Sen önceliğe karşılık gelen bir yöntemi çağırarak günlük ileti gönderebilir

m_log.fatal(Object message); 
m_log.fatal(Object message, Throwable t); 
m_log.error(Object message); 
m_log.error(Object message, Throwable t); 
m_log.warn(Object message); 
m_log.warn(Object message, Throwable t); 
m_log.info(Object message); 
m_log.info(Object message, Throwable t); 
m_log.debug(Object message); 
m_log.debug(Object message, Throwable t); 
m_log.trace(Object message); 
m_log.trace(Object message, Throwable t); 

Bu yöntemler en yüksekten en düşüğe öncelik sırasına göre listelenmiştir. Commons logging, varsayılan olarak, INFO ve üstü tüm mesajları gösterecek şekilde ayarlanmıştır. Gördüğünüz gibi, her bir yöntem İstisna gibi bir Throwable tipi gönderebileceğiniz bir yöntemle aşırı yüklenir - çok kullanışlı! Mesajları kaydetmek için yapmanız gereken tek şey bu. Burada istisna nesnesi atılmış hariç kaydedilir olarak stacktrace aramaya gerek yoktur

logger.error("IOException Occured :", exception); 

: Senin durumunda

, sadece kullanmak gerekir.

+0

Bir istisnayı günlüğe kaydetmek, bu şekilde istisnanın yığın izini kaydetmez, yalnızca iletiyi günlüğe kaydedebilir, örn. "IOException Yapıldı: Soket kapalı" ve hepsi bu kadar. –

İlgili konular