Commons-logging + Log4j
一、Commons-logging能帮我们做什么?
1、提供一个统一的日志接口,简单了操作,同时避免项目与某个日志实现系统紧密耦合
2、自动选择适当的日志实现系统
a.classpath下查找commons-logging.properties
b.classpath下查找Log4j的包
c.使用JDK自身的日志实现类(注:JDK1.4以后才有日志实现类)
d.使用commons-logging自身日志实现类SimpleLog
3、它甚至不需要配置
Commons-logging的Java类的代码:
package com.nadim.framework.monitor; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; public class Run { private static final Log log = LogFactory.getLog(Run.class); public static void main(String[] args) { //输出4种不同级别的日志 log.debug("111"); log.info("222"); log.warn("333"); log.error("444"); } }
jar包地址:http://commons.apache.org/proper/commons-logging/download_logging.cgi
单独使用Log4j的Java类的代码:
package com.nadim.framework.monitor; import org.apache.log4j.Logger; import org.apache.log4j.PropertyConfigurator; public class Run { static Logger logger = Logger.getLogger(TestLog4j.class); // First step public static void main(String[] args) { PropertyConfigurator.configure("log4j.properties"); logger.debug("Here is some DEBUG"); logger.info("Here is some INFO"); logger.warn("Here is some WARN"); logger.error("Here is some ERROR"); logger.fatal("Here is some FATAL"); } }
jar包地址:http://logging.apache.org/log4j/1.2/download.html
Commons-logging + Log4j的Java类的代码:
Java 代码同 Commons-logging的Java类的代码
commons-logging.properties 添加实现
org.apache.commons.logging.Log=org.apache.commons.logging.impl.Log4JLogger
二、log4j.properties的一点介绍
除去以#开头的注释以及空行,第一行有用的内容是: log4j.rootLogger = DEBUG, CONSOLE,A1
1、log4j.rootLogger是最最重要的一个属性了,它定义日志信息的“输出级别”和“输出目的地”。
2、第一个逗号之前的是“输出级别”;后面为“输出目的地”。可以同时指定多个“输出目的地”,以逗号隔开。
输出级别:DEBUG、INFO、WARN、ERROR、FATAL ,它们是由Log4j系统定义的。
输出目的地是自己定义的:
# 应用于控制台
1 ### set log levels ### 2 log4j.rootLogger = debug,stdout,D,E 3 4 ### 输出到控制台 ### 5 log4j.appender.stdout = org.apache.log4j.ConsoleAppender 6 log4j.appender.stdout.Target = System.out 7 ## 输出INFO级别以上的日志 8 log4j.appender.stdout.Threshold = INFO 9 log4j.appender.stdout.layout = org.apache.log4j.PatternLayout 10 log4j.appender.stdout.layout.ConversionPattern = %d{ABSOLUTE} %5p %c{1}:%L - %m%n 11 12 ### 输出到日志文件 ### 13 log4j.appender.D = org.apache.log4j.DailyRollingFileAppender 14 log4j.appender.D.File = D:/logs/debug.log 15 log4j.appender.D.Append = true 16 ## 输出DEBUG级别以上的日志 17 log4j.appender.D.Threshold = DEBUG 18 log4j.appender.D.layout = org.apache.log4j.PatternLayout 19 log4j.appender.D.layout.ConversionPattern = %-d{yyyy-MM-dd HH:mm:ss} [ %t:%r ] - [ %p ] %m%n 20 21 ### 保存异常信息到单独文件 ### 22 log4j.appender.E = org.apache.log4j.DailyRollingFileAppender 23 ## 异常日志文件名 24 log4j.appender.E.File = D\:/logs/error.log 25 log4j.appender.E.Append = true 26 ## 只输出ERROR级别以上的日志!!! 27 log4j.appender.E.Threshold = ERROR 28 log4j.appender.E.layout = org.apache.log4j.PatternLayout 29 log4j.appender.E.layout.ConversionPattern=%d{yyyy-MM-dd HH\:mm\:ss,SSS} %5p %c\:(%F\:%L) %n - %m%n
1 ### send error through email. 2 #log4j的邮件发送appender,如果有必要你可以写自己的appender 3 log4j.appender.MAIL=org.apache.log4j.net.SMTPAppender 4 #发送邮件的门槛,仅当等于或高于ERROR(比如FATAL)时,邮件才被发送 5 log4j.appender.MAIL.Threshold=ERROR 6 #缓存文件大小,日志达到10k时发送Email 7 log4j.appender.MAIL.BufferSize=10 8 #发送邮件的邮箱帐号 9 log4j.appender.MAIL.From=xxx@163.com 10 #SMTP邮件发送服务器地址 11 log4j.appender.MAIL.SMTPHost=smtp.163.com 12 #SMTP发送认证的帐号名 13 log4j.appender.MAIL.SMTPUsername=xxx@163.com 14 #SMTP发送认证帐号的密码 15 log4j.appender.MAIL.SMTPPassword=xxx 16 #是否打印调试信息,如果选true,则会输出和SMTP之间的握手等详细信息 17 log4j.appender.MAIL.SMTPDebug=false 18 #邮件主题 19 log4j.appender.MAIL.Subject=Log4JErrorMessage 20 #发送到什么邮箱,如果要发送给多个邮箱,则用逗号分隔; 21 #如果需要发副本给某人,则加入下列行 22 #log4j.appender.MAIL.Bcc=xxx@xxx.xxx 23 log4j.appender.MAIL.To=xxx@xxx.com 24 log4j.appender.MAIL.layout=org.apache.log4j.PatternLayout 25 log4j.appender.MAIL.layout.ConversionPattern=[framework]%d - %c -%-4r[%t]%-5p %c %x -%m%n
发送邮件注:添加mail.jar activation.jar 两个jar邮件发送jar包
myeclipse问题: java.lang.NoClassDefFoundError: com/sun/mail/util/LineInputStream
解决方案:删除MyEclipse 6.5/myeclipse/eclipse/plugins/com.genuitec.eclipse.j2eedt.core_6.5.0.zmyeclipse650200806/data/libraryset/EE_5/javaee.jar 里面的 mail.jar和activation.jar。
1 log4j.appender.db=org.apache.log4j.jdbc.JDBCAppender 2 log4j.appender.db.BufferSize=1 3 log4j.appender.db.driver=com.ibm.db2.jcc.DB2Driver 4 log4j.appender.db.URL=jdbc:db2://10.190.7.183:50000/FJDC2 5 log4j.appender.db.user=db2inst1 6 log4j.appender.db.password=db2admin 7 log4j.appender.db.sql=insert into zyms.test (orderno, name) values (0,'%d{yyyy-MM-dd HH\:mm\:ss,SSS} %5p %c\:(%F\:%L) %n - %m%n') 8 log4j.appender.db.layout=org.apache.log4j.PatternLayout
输出到数据库注:添加数据库相关jar包
1. 输出方式
org.apache.log4j.RollingFileAppender(滚动文件,自动记录最新日志)
org.apache.log4j.ConsoleAppender (控制台)
org.apache.log4j.FileAppender (文件)
org.apache.log4j.DailyRollingFileAppender (每天产生一个日志文件)
org.apache.log4j.WriterAppender (将日志信息以流格式发送到任意指定的地方)
2. 日记记录的优先级
OFF ,FATAL ,ERROR ,WARN ,INFO ,DEBUG ,ALL。
Log4j建议只使用FATAL ,ERROR ,WARN ,INFO ,DEBUG这五个级别。
3. 格式说明layout中的参数都以%开始,后面不同的参数代表不同的格式化信息(参数按字母表顺序列出):
%c 输出所属类的全名,可在修改为 %d{Num} ,Num类名输出的维(如:"org.apache.elathen.ClassName",%C{2}将输出elathen.ClassName)
%d 输出日志时间其格式为 %d{yyyy-MM-dd HH:mm:ss,SSS},可指定格式 如 %d{HH:mm:ss}
%l 输出日志事件发生位置,包括类目名、发生线程,在代码中的行数
%n 换行符
%m 输出代码指定信息,如info(“message”),输出message
%p 输出优先级,即 FATAL ,ERROR 等
%r 输出从启动到显示该log信息所耗费的毫秒数
%t 输出产生该日志事件的线程名