log4j.properties 使用
一.参数意义说明
输出级别的种类
error、warn、info、debug
error 为严重错误 主要是程序的错误
warn 为一般警告,比如session丢失
info 为一般要显示的信息,比如登录登出
debug 为程序的调试信息
配置日志信息输出目的地
log4j.appender.appendername = fully.qualified.name.of.appender.class
1.org.apache.log4j.consoleappender(控制台)
2.org.apache.log4j.fileappender(文件)
3.org.apache.log4j.dailyrollingfileappender(每天产生一个日志文件)
4.org.apache.log4j.rollingfileappender(文件大小到达指定尺寸的时候产生一个新的文件)
5.org.apache.log4j.writerappender(将日志信息以流格式发送到任意指定的地方)
配置日志信息的格式
log4j.appender.appendername.layout = fully.qualified.name.of.layout.class
1.org.apache.log4j.htmllayout(以html表格形式布局),
2.org.apache.log4j.patternlayout(可以灵活地指定布局模式),
3.org.apache.log4j.simplelayout(包含日志信息的级别和信息字符串),
4.org.apache.log4j.ttcclayout(包含日志产生的时间、线程、类别等等信息)
控制台选项
threshold=debug:指定日志消息的输出最低层次。
immediateflush=true:默认值是true,意谓着所有的消息都会被立即输出。
target=system.err:默认情况下是:system.out,指定输出控制台
fileappender 选项
threshold=debuf:指定日志消息的输出最低层次。
immediateflush=true:默认值是true,意谓着所有的消息都会被立即输出。
file=mylog.txt:指定消息输出到mylog.txt文件。
append=false:默认值是true,即将消息增加到指定文件中,false指将消息覆盖指定的文件内容。
rollingfileappender 选项
threshold=debug:指定日志消息的输出最低层次。
immediateflush=true:默认值是true,意谓着所有的消息都会被立即输出。
file=mylog.txt:指定消息输出到mylog.txt文件。
append=false:默认值是true,即将消息增加到指定文件中,false指将消息覆盖指定的文件内容。
maxfilesize=100kb: 后缀可以是kb, mb 或者是 gb. 在日志文件到达该大小时,将会自动滚动,即将原来的内容移到mylog.log.1文件。
maxbackupindex=2:指定可以产生的滚动文件的最大数。
log4j.appender.a1.layout.conversionpattern=%-4r %-5p %d{yyyy-mm-dd hh:mm:sss} %c %m%n
日志信息格式中几个符号所代表的含义:
-x号: x信息输出时左对齐;
%p: 输出日志信息优先级,即debug,info,warn,error,fatal,
%d: 输出日志时间点的日期或时间,默认格式为iso8601,也可以在其后指定格式,比如:%d{yyy mmm dd hh:mm:ss,sss},输出类似:2002年10月18日 22:10:28,921
%r: 输出自应用启动到输出该log信息耗费的毫秒数
%c: 输出日志信息所属的类目,通常就是所在类的全名
%t: 输出产生该日志事件的线程名
%l: 输出日志事件的发生位置,相当于%c.%m(%f:%l)的组合,包括类目名、发生的线程,以及在代码中的行数。举例:testlog4.main (testlog4.java:10)
%x: 输出和当前线程相关联的ndc(嵌套诊断环境),尤其用到像java servlets这样的多客户多线程的应用中。
%%: 输出一个"%"字符
%f: 输出日志消息产生时所在的文件名称
%l: 输出代码中的行号
%m: 输出代码中指定的消息,产生的日志具体信息
%n: 输出一个回车换行符,windows平台为"\r\n",unix平台为"\n"输出日志信息换行
可以在%与模式字符之间加上修饰符来控制其最小宽度、最大宽度、和文本的对齐方式。如:
1) c:指定输出category的名称,最小的宽度是20,如果category的名称小于20的话,默认的情况下右对齐。
2)%-20c:指定输出category的名称,最小的宽度是20,如果category的名称小于20的话,"-"号指定左对齐。
3)%.30c:指定输出category的名称,最大的宽度是30,如果category的名称大于30的话,就会将左边多出的字符截掉,但小于30的话也不会有空格。
4) .30c:如果category的名称小于20就补空格,并且右对齐,如果其名称长于30字符,就从左边较远输出的字符截掉。
二.文件配置sample1
log4j.rootlogger=debug,a1,r
#log4j.rootlogger=info,a1,r
# consoleappender 输出
log4j.appender.a1=org.apache.log4j.consoleappender
log4j.appender.a1.layout=org.apache.log4j.patternlayout
log4j.appender.a1.layout.conversionpattern=%-d{yyyy-mm-dd hh:mm:ss,sss} [%c]-[%p] %m%n
# file 输出 一天一个文件,输出路径可以定制,一般在根路径下
log4j.appender.r=org.apache.log4j.dailyrollingfileappender
log4j.appender.r.file=blog_log.txt
log4j.appender.r.maxfilesize=500kb
log4j.appender.r.maxbackupindex=10
log4j.appender.r.layout=org.apache.log4j.patternlayout
log4j.appender.r.layout.conversionpattern=%d{yyyy-mm-dd hh:mm:ss,sss} [%t] [%c] [%p] - %m%n
文件配置sample2
下面给出的log4j配置文件实现了输出到控制台,文件,回滚文件,发送日志邮件,输出到数据库日志表,自定义标签等全套功能。
log4j.rootlogger=debug,console,a1,im
#debug,console,file,rolling_file,mail,database
log4j.addivity.org.apache=true
###################
# console appender
###################
log4j.appender.console=org.apache.log4j.consoleappender
log4j.appender.threshold=debug
log4j.appender.console.target=system.out
log4j.appender.console.layout=org.apache.log4j.patternlayout
log4j.appender.console.layout.conversionpattern=[framework] %d - %c -%-4r [%t] %-5p %c %x - %m%n
#log4j.appender.console.layout.conversionpattern=[start]%d{date}[date]%n%p[priority]%n%x[ndc]%n%t[thread] n%c[category]%n%m[message]%n%n
#####################
# file appender
#####################
log4j.appender.file=org.apache.log4j.fileappender
log4j.appender.file.file=file.log
log4j.appender.file.append=false
log4j.appender.file.layout=org.apache.log4j.patternlayout
log4j.appender.file.layout.conversionpattern=[framework] %d - %c -%-4r [%t] %-5p %c %x - %m%n
# use this layout for logfactor 5 analysis
########################
# rolling file
########################
log4j.appender.rolling_file=org.apache.log4j.rollingfileappender
log4j.appender.rolling_file.threshold=error
log4j.appender.rolling_file.file=rolling.log
log4j.appender.rolling_file.append=true
log4j.appender.rolling_file.maxfilesize=10kb
log4j.appender.rolling_file.maxbackupindex=1
log4j.appender.rolling_file.layout=org.apache.log4j.patternlayout
log4j.appender.rolling_file.layout.conversionpattern=[framework] %d - %c -%-4r [%t] %-5p %c %x - %m%n
####################
# socket appender
####################
log4j.appender.socket=org.apache.log4j.rollingfileappender
log4j.appender.socket.remotehost=localhost
log4j.appender.socket.port=5001
log4j.appender.socket.locationinfo=true
# set up for log facter 5
log4j.appender.socket.layout=org.apache.log4j.patternlayout
log4j.appender.socet.layout.conversionpattern=[start]%d{date}[date]%n%p[priority]%n%x[ndc]%n%t[thread]%n%c[category]%n%m[message]%n%n
########################
# log factor 5 appender
########################
log4j.appender.lf5_appender=org.apache.log4j.lf5.lf5appender
log4j.appender.lf5_appender.maxnumberofrecords=2000
########################
# smtp appender
#######################
log4j.appender.mail=org.apache.log4j.net.smtpappender
log4j.appender.mail.threshold=fatal
log4j.appender.mail.buffersize=10
log4j.appender.mail.smtphost=mail.hollycrm.com
log4j.appender.mail.subject=log4j message
log4j.appender.mail.layout=org.apache.log4j.patternlayout
log4j.appender.mail.layout.conversionpattern=[framework] %d - %c -%-4r [%t] %-5p %c %x - %m%n
########################
# jdbc appender
#######################
log4j.appender.database=org.apache.log4j.jdbc.jdbcappender
log4j.appender.database.url=jdbc:mysql://localhost:3306/test
log4j.appender.database.driver=com.mysql.jdbc.driver
log4j.appender.database.user=root
log4j.appender.database.password=
log4j.appender.database.sql=insert into log4j (message) values ('[framework] %d - %c -%-4r [%t] %-5p %c %x - %m%n')
log4j.appender.database.layout=org.apache.log4j.patternlayout
log4j.appender.database.layout.conversionpattern=[framework] %d - %c -%-4r [%t] %-5p %c %x - %m%n
log4j.appender.a1=org.apache.log4j.dailyrollingfileappender
log4j.appender.a1.file=samplemessages.log4j
log4j.appender.a1.datepattern=yyyymmdd-hh'.log4j'
log4j.appender.a1.layout=org.apache.log4j.xml.xmllayout
###################
#自定义appender
###################
log4j.appender.im = net.cybercorlin.util.logger.appender.imappender
log4j.appender.im.host = mail.cybercorlin.net
log4j.appender.im.username = username
log4j.appender.im.password = password
log4j.appender.im.recipient =
log4j.appender.im.layout=org.apache.log4j.patternlayout
log4j.appender.im.layout.conversionpattern =[framework] %d - %c -%-4r [%t] %-5p %c %x - %m%n
三.高级使用
实验目的:
1.把fatal级错误写入2000nt日志
2. warn,error,fatal级错误发送email通知管理员
3.其他级别的错误直接在后台输出
实验步骤:
输出到2000nt日志
1.把log4j压缩包里的nteventlogappender.dll拷到winnt\system32目录下
2.写配置文件log4j.properties
# 在2000系统日志输出
log4j.logger.ntlog=fatal, a8
# appender a8
log4j.appender.a8=org.apache.log4j.nt.nteventlogappender
log4j.appender.a8.source=javatest
log4j.appender.a8.layout=org.apache.log4j.patternlayout
log4j.appender.a8.layout.conversionpattern=%-4r %-5p [%t] 7c %3x - %m%n
3.调用代码:
logger logger2 = logger.getlogger("ntlog"); //要和配置文件中设置的名字相同
logger2.debug("debug!!!");
logger2.info("info!!!");
logger2.warn("warn!!!");
logger2.error("error!!!");
//只有这个错误才会写入2000日志
logger2.fatal("fatal!!!");
发送email通知管理员:
1. 首先下载javamail和jaf,
在项目中引用mail.jar和activation.jar。
2. 写配置文件
# 将日志发送到email
log4j.logger.maillog=warn,a5
# appender a5
log4j.appender.a5=org.apache.log4j.net.smtpappender
log4j.appender.a5.buffersize=5
log4j.appender.a5.subject=errorlog
log4j.appender.a5.smtphost=smtp.263.net
log4j.appender.a5.layout=org.apache.log4j.patternlayout
log4j.appender.a5.layout.conversionpattern=%-4r %-5p [%t] 7c %3x - %m%n
3.调用代码:
//把日志发送到mail
logger logger3 = logger.getlogger("maillog");
logger3.warn("warn!!!");
logger3.error("error!!!");
logger3.fatal("fatal!!!");
在后台输出所有类别的错误:
1. 写配置文件
# 在后台输出
log4j.logger.console=debug, a1
# appender a1
log4j.appender.a1=org.apache.log4j.consoleappender
log4j.appender.a1.layout=org.apache.log4j.patternlayout
log4j.appender.a1.layout.conversionpattern=%-4r %-5p [%t] 7c %3x - %m%n
2.调用代码
logger logger1 = logger.getlogger("console");
logger1.debug("debug!!!");
logger1.info("info!!!");
logger1.warn("warn!!!");
logger1.error("error!!!");
logger1.fatal("fatal!!!");
--------------------------------------------------------------------
全部配置文件:log4j.properties
# 在后台输出
log4j.logger.console=debug, a1
# appender a1
log4j.appender.a1=org.apache.log4j.consoleappender
log4j.appender.a1.layout=org.apache.log4j.patternlayout
log4j.appender.a1.layout.conversionpattern=%-4r %-5p [%t] 7c %3x - %m%n
# 在2000系统日志输出
log4j.logger.ntlog=fatal, a8
# appender a8
log4j.appender.a8=org.apache.log4j.nt.nteventlogappender
log4j.appender.a8.source=javatest
log4j.appender.a8.layout=org.apache.log4j.patternlayout
log4j.appender.a8.layout.conversionpattern=%-4r %-5p [%t] 7c %3x - %m%n
# 将日志发送到email
log4j.logger.maillog=warn,a5
# appender a5
log4j.appender.a5=org.apache.log4j.net.smtpappender
log4j.appender.a5.buffersize=5
log4j.appender.a5.subject=errorlog
log4j.appender.a5.smtphost=smtp.263.net
log4j.appender.a5.layout=org.apache.log4j.patternlayout
log4j.appender.a5.layout.conversionpattern=%-4r %-5p [%t] 7c %3x - %m%n
全部代码:log4jtest.java
/*
* 创建日期 2003-11-13
*/
package edu.bcu.bean;
import org.apache.log4j.*;
//import org.apache.log4j.nt.*;
//import org.apache.log4j.net.*;
/**
* @author yanxu
*/
public class log4jtest
{
public static void main(string args[])
{
propertyconfigurator.configure("log4j.properties");
//在后台输出
logger logger1 = logger.getlogger("console");
logger1.debug("debug!!!");
logger1.info("info!!!");
logger1.warn("warn!!!");
logger1.error("error!!!");
logger1.fatal("fatal!!!");
//在nt系统日志输出
logger logger2 = logger.getlogger("ntlog");
//nteventlogappender nla = new nteventlogappender();
logger2.debug("debug!!!");
logger2.info("info!!!");
logger2.warn("warn!!!");
logger2.error("error!!!");
//只有这个错误才会写入2000日志
logger2.fatal("fatal!!!");
//把日志发送到mail
logger logger3 = logger.getlogger("maillog");
//smtpappender sa = new smtpappender();
logger3.warn("warn!!!");
logger3.error("error!!!");
logger3.fatal("fatal!!!");
}
}