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 输出产生该日志事件的线程名

posted @ 2015-08-11 13:29  Nadim  阅读(805)  评论(0编辑  收藏  举报