log4j学习及使用心得

使用方法
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确实很好很强大。就像老师说的,去到公司里,可能没有人要求你要写日志,但是最好养成习惯自己要写。既是对客户负责,也是为了以后维护方便负责。所以,我决定,以后多记录日志吧。

posted @ 2016-05-19 08:09  会飞的小祥  阅读(2618)  评论(0编辑  收藏  举报