1、Log4J配备文献(Configuration File)就是用来设立记录器级别、存储器和布局,它可接key=value格式设立或xml格式设立信息。通过配备,可以创立出Log4J运营环境。 1. 配备文献 Log4J配备文献基本格式如下: #配备根Logger log4j.rootLogger = [ level ] , appenderName1 , appenderName2 , … #配备日记信息输出目地Appender log4j.appender.appenderName = fully.qualified.name.of.appender.
2、class log4j.appender.appenderName.option1 = value1 … log4j.appender.appenderName.optionN = valueN #配备日记信息格式(布局) log4j.appender.appenderName.layout = fully.qualified.name.of.layout.class log4j.appender.appenderName.layout.option1 = value1 … log4j.appender.appender
3、Name.layout.optionN = valueN 其中 [level] 是日记输出级别,共有5级: FATAL 0 ERROR 3 WARN 4 INFO 6 DEBUG 7 Appender 为日记输出目地,Log4j提供appender有如下几种: org.apache.log4j.ConsoleAppender(控制台), org.apache.log4j.FileAppender(文献), org.apache.log4j.DailyRollingFileAp
4、pender(每天产生一种日记文献), org.apache.log4j.RollingFileAppender(文献大小到达指定尺寸时候产生一种新文献), org.apache.log4j.WriterAppender(将日记信息以流格式发送到任意指定地方) Layout:日记输出格式,Log4j提供layout有如下几种: org.apache.log4j.HTMLLayout(以HTML表格形式布局), org.apache.log4j.PatternLayout(可以灵活地指定布局模式), org.apache.log4j.SimpleLayout(包括日记信息级别
5、和信息字符串), org.apache.log4j.TTCCLayout(包括日记产生时间、线程、类别等等信息) 打印参数: Log4J采用类似C语言中printf函数打印格式格式化日记信息,如下: %m 输出代码中指定消息 %p 输出优先级,即DEBUG,INFO,WARN,ERROR,FATAL %r 输出自应用启动到输出该log信息耗费毫秒数 %c 输出所属类目,普通就是所在类全名 %t 输出产生该日记事件线程名 %n 输出一种回车换行符,Windows平台为“/r/n”,Unix平台为“/n” %d
6、 输出日记时间点日期或时间,默认格式为ISO8601,也可以在其后指定格式,例如:%d{yyy MMM dd HH:mm:ss ,SSS},输出类似:10月18日 22 : 10 : 28 , 921 %l 输出日记事件发生位置,涉及类目名、发生线程,以及在代码中行数。举例:Testlog4.main(TestLog4.java: 10 ) 2. 在代码中初始化Logger: 1)在程序中调用BasicConfigurator.configure()办法:给根记录器增长一种ConsoleAppender,输出格式通过PatternLayout设为"%-4r [%
7、t] %-5p %c %x - %m%n",尚有根记录器默认级别是Level.DEBUG. 2)配备放在文献里,通过命令行参数传递文献名字,通过PropertyConfigurator.configure(args[x])解析并配备; 3)配备放在文献里,通过环境变量传递文献名等信息,运用log4j默认初始化过程解析并配备; 4)配备放在文献里,通过应用服务器配备传递文献名等信息,运用一种特殊servlet来完毕配备。 3. 为不同 Appender 设立日记输出级别: 当调试系统时,咱们往往注意只是异常级别日记输出,但是普通所有级别输出都是放在一种文献里,如果日记输出级别是B
8、UG!?那就慢慢去找吧。 这时咱们也许会想要是能把异常信息单独输出到一种文献里该多好啊。固然可以,Log4j已经提供了这样功能,咱们只需要在配备中修改AppenderThreshold 就能实现,例如下面例子: [配备文献] ### set log levels ### log4j.rootLogger = debug , stdout , D , E ### 输出到控制台 ### log4j.appender.stdout = org.apache.log4j.ConsoleAppender log4j.appender.stdout.Target = Syst
9、em.out log4j.appender.stdout.layout = org.apache.log4j.PatternLayout log4j.appender.stdout.layout.ConversionPattern = %d{ABSOLUTE} %5p %c{ 1 }:%L - %m%n ### 输出到日记文献 ### log4j.appender.D = org.apache.log4j.DailyRollingFileAppender log4j.appender.D.File = logs/log.log log4j.appender.D.Append
10、 true log4j.appender.D.Threshold = DEBUG ## 输出DEBUG级别以上日记 log4j.appender.D.layout = org.apache.log4j.PatternLayout log4j.appender.D.layout.ConversionPattern = %-d{yyyy-MM-dd HH:mm:ss} [ %t:%r ] - [ %p ] %m%n ### 保存异常信息到单独文献 ### log4j.appender.D = org.apache.log4j.DailyRollingFileAppender
11、log4j.appender.D.File = logs/error.log ## 异常日记文献名 log4j.appender.D.Append = true log4j.appender.D.Threshold = ERROR ## 只输出ERROR级别以上日记!!! log4j.appender.D.layout = org.apache.log4j.PatternLayout log4j.appender.D.layout.ConversionPattern = %-d{yyyy-MM-dd HH:mm:ss} [ %t:%r ] - [ %p ] %m%n [代码中
12、使用] public class TestLog4j { public static void main(String[] args) { PropertyConfigurator.configure( " D:/Code/conf/log4j.properties " ); Logger logger = Logger.getLogger(TestLog4j. class ); logger.debug( " debug " ); logger.error( " error
13、" ); } } 运营一下,看看异常信息是不是保存在了一种单独文献error.log中 log4j.properties 使用 一.参数意义阐明 输出级别种类 ERROR、WARN、INFO、DEBUG ERROR 为严重错误 重要是程序错误 WARN 为普通警告,例如session丢失 INFO 为普通要显示信息,例如登录登出 DEBUG 为程序调试信息 配备日记信息输出目地 log4j.appender.appenderName = fully.qualified.name.of.appender.class 1.org.a
14、pache.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.qua
15、lified.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,意谓着所有消息都会被
16、及时输出。 Target=System.err:默认状况下是:System.out,指定输出控制台 FileAppender 选项 Threshold=DEBUF:指定日记消息输出最低层次。 ImmediateFlush=true:默认值是true,意谓着所有消息都会被及时输出。 File=mylog.txt:指定消息输出到mylog.txt文献。 Append=false:默认值是true,即将消息增长到指定文献中,false指将消息覆盖指定文献内容。 RollingFileAppender 选项 Threshold=DEBUG:指定日记消息输出最低层次。 Immediat
17、eFlush=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{yy
18、yy-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},输出类似:10月18日 22:10:28,921 %r:输出自应用启动到输出该log信息耗费毫秒数 %c:输出日记信息所属类目,普通就是所在类全名 %t:输出产生该日记事件线程名 %l:输出日记事件发生位置,相称于%C.
19、M(%F:%L)组合,涉及类目名、发生线程,以及在代码中行数。举例:Testlog4.main (TestLog4.java:10) %x:输出和当前线程有关联NDC(嵌套诊断环境),特别用到像java servlets这样多客户多线程应用中。 %%:输出一种"%"字符 %F:输出日记消息产生时所在文献名称 %L:输出代码中行号 %m:输出代码中指定消息,产生日记详细信息 %n:输出一种回车换行符,Windows平台为"/r/n",Unix平台为"/n"输出日记信息换行 可以在%与模式字符之间加上修饰符来控制其最小宽度、最大宽度、和文本对齐方式。如: 1)%2
20、0c:指定输出category名称,最小宽度是20,如果category名称不大于20话,默认状况下右对齐。 2)%-20c:指定输出category名称,最小宽度是20,如果category名称不大于20话,"-"号指定左对齐。 3)%.30c:指定输出category名称,最大宽度是30,如果category名称不不大于30话,就会将左边多余字符截掉,但不大于30话也不会有空格。 4)%20.30c:如果category名称不大于20就补空格,并且右对齐,如果其名称长于30字符,就从左边较远输出字符截掉。 二.文献配备Sample1 log4j.rootLogger=DEB
21、UG,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.ap
22、pender.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]
23、 - %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
24、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.Conver
25、sionPattern=[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.appe
26、nder.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.
27、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.apac
28、he.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
29、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
30、 ######################## # Log Factor 5 Appender ######################## log4j.appender.LF5_APPENDER=org.apache.log4j.lf5.LF5Appender log4j.appender.LF5_APPENDER.MaxNumberOfRecords= ######################## # SMTP Appender ####################### log4j.appender.MAIL=.SMTPAppender
31、log4j.appender.MAIL.Threshold=FATAL log4j.appender.MAIL.BufferSize=10 log4j.appender.MAIL.From= log4j.appender.MAIL.SMTPHost= log4j.appender.MAIL.Subject=Log4J Message log4j.appender.MAIL.To= log4j.appender.MAIL.layout=org.apache.log4j.PatternLayout log4j.appender.MAIL.layout.ConversionP
32、attern=[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.Dr
33、iver 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.Conversi
34、onPattern=[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 ################### #
35、自定义Appender ################### log4j.appender.im = net.cybercorlin.util.logger.appender.IMAppender log4j.appender.im.host = log4j.appender.im.username = username log4j.appender.im.password = password log4j.appender.im.recipient = log4j.appender.im.layout=org.apache.log4j.PatternLayout
36、 log4j.appender.im.layout.ConversionPattern =[framework] %d - %c -%-4r [%t] %-5p %c %x - %m%n 三.高档使用 实验目: 1.把FATAL级错误写入NT日记 2. WARN,ERROR,FATAL级错误发送email告知管理员 3.其她级别错误直接在后台输出 实验环节: 输出到NT日记 1.把Log4j压缩包里NTEventLogAppender.dll拷到WINNT/SYSTEM32目录下 2.写配备文献log4j.properties # 在系统日记输出 log
37、4j.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] %37c %3x - %m%n 3.调用代码: Logger logger2 = Lo
38、gger.getLogger("NTlog");//要和配备文献中设立名字相似 logger2.debug("debug!!!"); logger2.info("info!!!"); logger2.warn("warn!!!"); logger2.error("error!!!"); //只有这个错误才会写入日记 logger2.fatal("fatal!!!"); 发送email告知管理员: 1. 一方面下载JavaMail和JAF, 在项目中引用mail.jar和activation.jar。 2. 写配备文献 # 将日记发送到
39、email log4j.logger.MailLog=WARN,A5 # APPENDER A5 log4j.appender.A5=.SMTPAppender log4j.appender.A5.BufferSize=5 log4j.appender.A5.To= log4j.appender.A5.From= log4j.appender.A5.Subject=ErrorLog log4j.appender.A5.SMTPHost= log4j.appender.A5.layout=org.apache.log4j.PatternLayout lo
40、g4j.appender.A5.layout.ConversionPattern=%-4r %-5p [%t] %37c %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 #
41、 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] %37c %3x - %m%n 2.调用代码 Logger logger1 = Logger.getLogger("console"); logger1.debug("debug!!!"); logger1.info
42、"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.ConsoleAppe
43、nder log4j.appender.A1.layout=org.apache.log4j.PatternLayout log4j.appender.A1.layout.ConversionPattern=%-4r %-5p [%t] %37c %3x - %m%n # 在系统日记输出 log4j.logger.NTlog=FATAL,A8 # APPENDER A8 log4j.appender.A8=org.apache.log4j.nt.NTEventLogAppender log4j.appender.A8.Source=JavaTest log4j.a
44、ppender.A8.layout=org.apache.log4j.PatternLayout log4j.appender.A8.layout.ConversionPattern=%-4r %-5p [%t] %37c %3x - %m%n # 将日记发送到email log4j.logger.MailLog=WARN,A5 # APPENDER A5 log4j.appender.A5=.SMTPAppender log4j.appender.A5.BufferSize=5 log4j.appender.A5.To= log4j.appender.A5.F
45、rom= log4j.appender.A5.Subject=ErrorLog log4j.appender.A5.SMTPHost= log4j.appender.A5.layout=org.apache.log4j.PatternLayout log4j.appender.A5.layout.ConversionPattern=%-4r %-5p [%t] %37c %3x - %m%n 所有代码:Log4jTest.java /* * 创立日期 -11-13 */ package edu.bcu.Bean; import org.a
46、pache.log4j.*; //import org.apache.log4j.nt.*; //import .*; /** * @author yanxu */ public class Log4jTest { public static void main(String args[]) { PropertyConfigurator.configure("log4j.properties"); //在后台输出 Logger logger1 = Logger.getLogger("console");
47、 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("deb
48、ug!!!"); logger2.info("info!!!"); logger2.warn("warn!!!"); logger2.error("error!!!"); //只有这个错误才会写入日记 logger2.fatal("fatal!!!"); //把日记发送到mail Logger logger3 = Logger.getLogger("MailLog"); //SMTPAppender sa = new SMTPAppender(); logger3.warn("warn!!!"); logger3.error("error!!!"); logger3.fatal("fatal!!!"); } }






