使用方法
1,導入需要的3個包
2,配置log4j
3.寫log4j.properties
4.log4j發送日志郵件
5.在java程序中調用log4j
問題歸類
1.創建log4j.properties文件的存放位置錯誤。
2.粗心大意寫錯代碼的低級錯誤。
3.發送日志郵件時沒有通過認證。
小結
今天老師講的內容不少,感覺收獲也挺多的。其中log4j是我先前自學過程中從未接觸過的知識,感覺很棒,寫下來備忘。
簡介
log4j(log for java)貌似是某個大牛寫出的為java提供記錄日志文件的包,提供了多種方式記錄,包括終端(Console),文件(File),數據庫(JDBC),郵件(SMTP)等等。
使用方法
1,導入需要的3個包
log4j-1.2.15.jar
mail.jar
activation.jar
要使用log4j必須使用到“log4j-1.2.15.jar”,推薦用14以上版本,因為版本低於log4j-1.2.14.jar不支持SMTP認證,如果發送到郵件時,並且這個郵件服務商是需要認證的(也就是說需要賬號和密碼),需要自己封裝這個功能,不過現在用的15次修訂版,已經封裝進這個功能,可以直接拿來用了。
方法:工程-->右鍵-->Build Path-->Add External Archives-->找到這3個包就Ok了。
2,配置log4j
也就是書寫log4j.properties或.xml,只說properties吧。
方法:包名-->右鍵-->New-->File-->名稱輸入log4j.properties,創建成功,開始寫吧。
3.寫log4j.properties
轉到source里,書寫如下
log4j.rootLogger = debug, console, file, mail
#這句話是配置根Logger,debug是優先級。console ,file , mail 是自定義的名字,代表發送日志文件到console--終端,file--文件,mai--郵件。
#拓展:優先級:有4個。debug<info<warn<error.從左到右依次增高。只有比配置的優先級高的才能輸出。例如上邊配置為debug,那么info,warn,error都可以輸出。
log4j.appender.console = org.apache.log4j.ConsoleAppender
#這一句是指定console用的是什么方式,這里采用的是ConsoleAppender.class終端顯示方式
log4j.appender.console.Target = System.err
#讓錯誤信息以System.err的紅色字體顯示
log4j.appender.console.layout = org.apache.log4j.SimpleLayout
#定義顯示布局,這里采用的是簡單布局,不可自定義。
log4j.appender.file = org.apache.log4j.FileAppender
log4j.appender.file.File = div.log
log4j.appender.file.layout = org.apache.log4j.PatternLayout
log4j.appender.file.layout.ConversionPattern = %d{yyyy-MM-dd HH:mm:ss} %l %m %n
#這幾句是和終端類似的寫法,是把日志輸出到文件。其中,布局上采用PatternLayout自定義布局,%d是自定義日期顯示,%l是輸出日志的語句處在所在類的第幾行,%m是輸出日志信息的方法名,%n是換行。
以上就是輸出到終端和文件的書寫方法,下面着重記錄一下將日志發送到郵件的寫法。
4.log4j發送日志郵件
#接上文中,已經定義了mail,下邊開始寫郵件部分
log4j.appender.mail = org.apache.log4j.net.SMTPAppender
#定義mail是用的SMTPAppender方式
log4j.appender.mail.From = XXX@163.com
#發送郵箱名稱
log4j.appender.mail.SMTPUsername = XXX
log4j.appender.mail.SMTPPassword = ***
#因為服務商需要認證賬號密碼,所以在這里填寫你的用戶名和密碼
log4j.appender.mail.SMTPHost = smtp.163.com
#定義你使用誰家的SMTP郵件發送服務器,這里就填個丁三石的吧。
log4j.appender.mail.Subject = 這里填寫標題
log4j.appender.mail.To = XXXX@qq.com
#填寫需要發送到的郵箱地址
log4j.appender.mail.layout = org.apache.log4j.PatternLayout
log4j.appender.mail.layout.ConversionPattern = %d{yyyy-MM-dd HH:mm:ss} %l %m %n
#后邊兩句不用說,是用來定義布局的。
這就是發送到郵件的寫法。順便說一句,郵件的發送默認優先級是error,就是說只有程序出現嚴重錯誤,報出error錯誤的時候,才會向指定郵箱發送郵件。其實可以通過Overload掉TriggeringEventEvaluator類的一個方法isTriggeringEvent。
@Override
public boolean isTriggeringEvent(LoggingEvent arg0) {
return arg0.getLevel().isGreaterOrEqual(Level.INFO);
}
5.在java程序中調用log4j
1.在需要log4j記錄日志的類中,import org.apache.log4j.Logger;
2.在類中定義:private static Logger log = Logger.getLogger(XXX.class); 其中XXX.class 是你要記錄的字節碼文件,可以寫當前類名.class。
3.通過引用變量log去調用Logger中的記錄日志的函數,有:debug(); info(); warn(); error();等
問題歸類
從接觸log4j到程序成功調試出來,期間真是錯誤百出啊,下邊就我所出現過的錯誤一一列舉出來,用以備忘。
1.創建log4j.properties文件的存放位置錯誤。
log4j:WARN No appenders could be found for logger (Div).
log4j:WARN Please initialize the log4j system properly.
log4j.properties文件應該放到src名下,與包名是並列的,而不應該放到工程名下。
解決辦法:將log4j.properties文件移動到src下即可。
2.粗心大意寫錯代碼的低級錯誤。
log4j:WARN No such property [convirsionPattern] in org.apache.log4j.PatternLayout.
例如上例中,ConversionPattern 錯寫成了 ConvirsionPattern,報錯。
解決辦法:最好解決的一類錯誤,根據報錯的字段查找書寫錯誤,其中最容易錯的地方是layout,嚴格區分大小寫。
3.發送日志郵件時沒有通過認證。
log4j:ERROR Error occured while sending e-mail notification.
javax.mail.SendFailedException: Sending failed;
這個就是很明顯的發送郵件失敗異常。
nested exception is:
javax.mail.MessagingException: 553 authentication is required,smtp11,D8CowEC51k9BJGVREZ+ZAA--.454S2 1365582913
上邊這個異常是郵件信息異常,說明沒有配置username 和 password
解決辦法:添加
log4j.appender.mail.SMTPUsername = XXX
log4j.appender.mail.SMTPPassword = ***
nested exception is:
javax.mail.AuthenticationFailedException
上邊這個是我見過最多的錯誤,意思是認證失敗異常,就是說賬號密碼不正確。
解決辦法:請確認你的用戶名和密碼是否正確,如果沒有郵箱,那么就去申請一個吧。
小結
log4j確實很好很強大。就像老師說的,去到公司里,可能沒有人要求你要寫日志,但是最好養成習慣自己要寫。既是對客戶負責,也是為了以后維護方便負責。所以,我決定,以后多記錄日志吧。