级别:DEBUG>INFO>ERROR (一)什么是log4j?

log4j是Apache的一个开放源码项目,对于JAVA的developer来说,这是一个很好的日志管理工具,可以通过log4j来控制日志语句的输出,输出的目的地可以是控制台,文件,邮件或者数据库等;

对于一个日志管理工具来说,我们需要考虑哪些关键点,不外如下三种:

1,日志的输出目的地;

2,日志的输出格式;

3,日志的优先级;

log4j中,developer可以自定义日志的输出级别:

DEBUG,INFO,WARN,ERROR,TATAL;

还有两个关键字:

ALL:输出所有的日志;

OFF:关闭所以的日志输出;

那么log4j用什么方式来让developer来使用呢,有两种方式:Porperties和XML。

(二)配置文件的示例代码

(1)Properties文件

log4j.rootlogger = DEBUG,stdout

#log4j常用的优先级FATAL>ERROR>WARN>INFO>DEBUG

log4j.logger.org=ERROR,A1

#A1设置输出地A1到文件,文件大小达到指定尺寸时产生一个新的文件

log4j.appender.A1 = org.apache.log4j.RollingFileAppender

###文件位置###

log4j.appender.A1.File=orglog.log

###文件大小

log4j.appender.A1.MaxFileSize=500KB

log4j.appender.A1.MaxBackupIndex=50

log4j.appender.A1.Append=true

###设置A1的输出布局格式PatterLayout(可以灵活的指定布局格式)##

log4j.appender.A1.layout=org.apache.log4j.PatternLayout

log4j.appender.A1.layout.ConversionPattern=%d{ISO8601}- [%p] [%C{1}]-%m%n

#stdout应用于控制台

log4j.appender.stdout=org.apache.log4j.ConsoleAppender

###设置stdout的输出布局格式PatterLayout(可以灵活得指定布局格式)##

log4j.appender.stdout.layout=org.apache.log4j.PatternLayout

log4j.appender.stdout.layout.ConversionPattern=[%-5p] %d{yyyy-MM-dd HH:mm:ss} %c -%m%n

怎么使用呢,在程序的开始位置定义Logger

static Logger logger = Logger.getLogger(myClass.getName())

然后在你需要日志的地方,添加这样代码即可

logger.debug("在这里填写要输出的日志信息即可");

(2)XML文件

<?xml version="1.0" encoding="UTF-8"?>

<!DOCTYPE log4j:configuration SYSTEM "log4j.dtd">

<log4j:configuration

    <appender name="appender" class="org.apache.log4j.FileAppender">

        <param name="File" value="log.txt">定义日志输出的文件

        <param name="Append" value="false">

        <layout class="org.apache.log4j.PatternLayout">

        <param name="ConversionPattern" value="%d[%t]%p - %m%n"/>定义输出日志时的时间格式

         </layout>

    </appender>

    <root>

        <priority value="debug"/>定义日志输出的级别

        <appender-ref ref="appender"/>

    </root> 

</log4j:configuration>   

(三)log4j的下载与配置

       版本:logging-log4j-1.2.14.zip

2,配置:将zip压缩包解压后,将其中的log4j-1.2.14.jar放在WEB-INF/lib目录下,并且加入到CLASSPATH中,然后将配置文件放在WEB-INF/src或WEB-INF/classes

(四)日志输出格式和输出位置

1,日志的输出格式

四种日志输出样式:

@1,org.apache.log4j.HTMLLayout(HTML样式布局)

@2,org.apache.log4j.PatternLayout(自由指定样式)

@3,org.apache.log4j.SimpleLayout(包含日志级别与信息的样式)

@4,org.apache.log4j.TTCCLayout(包含日志时间,线程,类别等信息的样式)

2,打印格式格式化日志信息的打印参数:

@1,%m:输出代码中指定的信息;

@2,%p:输出优先级,即DEBUG,INFO,INFO,WARN,ERROR,FATAL;

@3,%r:输出自应用启动到输出改log信息耗费的毫秒数;

@4,%c:输出所属的类目,通常就是所在类的全名;

@5,%t:输出产生该日志事件的线程名;

@6,%n:输出一个回车换行符,Windows平台为“rn”,UNIX平台为“n”;

@7,%d :输出日志时间点的日期或时间

@8,%l:输出日志时事件的发生位置,包括类目名,发生的线程,以及在代码中的行数。

3,日志输出位置的方式:

@1,ConsoleAppender:将日志输出到控制台;

@2,FileAppende:将日志输出到文件

@3,DailyRollingFileAppender:扩展FileAppender,每天产生一个日志文件

@4,RollingFileAppender:扩展FileAppender,备份容量达到一定大小的日志文件

@5,WriterAppender:将日志信息以流格式发送到任意指定的地方;

@6,JDBCAppender:将日志输出到数据库;

@7,SMTPAppender:把日志发送至邮件。

示例代码:

(1)ConsoleAppender:将日志输出到控制台

log4j.appender.A1=org.apache.log4j.ConsoleAppender(指定输出到控制台)

log4j.appender.A1.Threshold=DEBUG(指定输出类别)

log4j.appender.A1.Target=System.out

log4j.appender.A1.layout=org.apache.log4j.PatternLayout(指定输出布局)

log4j.appender.stdout.layout.ConversionPattern=[%-5p] %d{yyyy-MM-dd HH:mm:ss} %c -%m%n 

#[%-5p]%d{yyyy-MM-dd HH:mm:ss,SSS} method:%l%n%m%n

(2)FileAppende:将日志输出到文件

log4j.appender.A1=org.apache.log4j.FileAppender

log4j.appender.FILE.File=file.log(指定输出的路径及文件名)

log4j.appender.FILE.Append=false

log4j.appender.A1.layout=org.apache.log4j.PatternLayout

log4j.appender.stdout.layout.ConversionPattern=[%-5p] %d{yyyy-MM-dd HH:mm:ss} %c -%m%n 

#[%-5p]%d{yyyy-MM-dd HH:mm:ss,SSS} method:%l%n%m%n

(3)RollingFileAppender:扩展FileAppender,备份容量达到一定大小的日志文件

log4j.appender.A1=org.apache.log4j.RollingFileAppender

###文件位置##

log4j.appender.A1.File=orglog.log

#文件大小

log4j.appender.A1.MaxFileSize=500KB

log4j.appender.A1.MaxBackupIndex=50

log4j.appender.A1.Append=true

###设置A1的输出布局格式##

log4j.appender.A1.layout=org.apache.log4j.PatternLayout

log4j.appender.A1.layout.ConversionPattern=%d{ISO8601}- [%p] [%C{1}]-%m%n

(4)JDBCAppender:将日志输出到数据库

log4j.appender.A1=org.apache.log4j.jdbc.JDBCAppender(指定输出到数据库)

log4j.appender.A1.URL=jdbc:mysql://localhost:3306/myApp(指定数据库URL)

log4j.appender.A1.driver=com.mysql.jdbc.Driver(指定数据库driver)

log4j.appender.A1.user=root

log4j.appender.A1.password=111

log4j.appender.A1.sql=INSERT INTO LOG4J (Message) VALUES('%d{ISO8601} - [%p] [%c{1}] -%m%n')(组织SQL语句)

log4j.appender.A1.layout=org.apache.log4j.PatternLayout

log4j.appender.A1.layout.ConversionPattern=%d{ISO8601}- [%p] [%C{1}]-%m%n

(5)SMTPAppender:把日志发送至邮件

log4j.appender.A1.=org.apache.log4j.net.SMTPAppender

log4j.appender.A1.Threshold=FATAL

log4j.appender.A1.BufferSize=10

log4j.appender.A1.From=gf2008@1212.com(发件人)

log4j.appender.A1.SMTPHost=mail.1212.com(SMTP服务器)

log4j.appender.A1.Subject=Log4J Message

log4j.appender.A1.To=gf2008@1212.com(收件人)

log4j.appender.A1.layout=org.apache.log4j.PatternLayout

log4j.appender.A1.layout.ConversionPattern=%d{ISO8601}- [%p] [%C{1}]-%m%n