1. 1. 配置文件  
2. Log4J配置文件的基本格式如下:   
3.   
4.   
5. #配置根Logger  
6. log4j.rootLogger  =   [ level ]   ,  appenderName1 ,  appenderName2 ,  …  
7.   
8.   
9. #配置日志信息输出目的地Appender  
10. log4j.appender.appenderName  =  fully.qualified.name.of.appender.class   
11.   log4j.appender.appenderName.option1  =  value1   
12.   …   
13.   log4j.appender.appenderName.optionN  =  valueN   
14.   
15.   
16. #配置日志信息的格式(布局)  
17. log4j.appender.appenderName.layout  =  fully.qualified.name.of.layout.class   
18.   log4j.appender.appenderName.layout.option1  =  value1   
19.   …   
20.   log4j.appender.appenderName.layout.optionN  =  valueN    
21. 其中 [level] 是日志输出级别,共有5级:  
22.   
23.   
24. FATAL       0    
25. ERROR      3    
26. WARN       4    
27. INFO         6    
28. DEBUG      7   
29.    
30. Appender 为日志输出目的地,Log4j提供的appender有以下几种:  
31.   
32.   
33. org.apache.log4j.ConsoleAppender(控制台),  
34. org.apache.log4j.FileAppender(文件),  
35. org.apache.log4j.DailyRollingFileAppender(每天产生一个日志文件),  
36. org.apache.log4j.RollingFileAppender(文件大小到达指定尺寸的时候产生一个新的文件),  
37. org.apache.log4j.WriterAppender(将日志信息以流格式发送到任意指定的地方)   
38. Layout:日志输出格式,Log4j提供的layout有以下几种:  
39.   
40.   
41.   
42.   
43. org.apache.log4j.HTMLLayout(以HTML表格形式布局),  
44. org.apache.log4j.PatternLayout(可以灵活地指定布局模式),  
45. org.apache.log4j.SimpleLayout(包含日志信息的级别和信息字符串),  
46. org.apache.log4j.TTCCLayout(包含日志产生的时间、线程、类别等等信息)   
47. 打印参数: Log4J采用类似C语言中的printf函数的打印格式格式化日志信息,如下:  
48.   
49.   
50.   
51.   
52.     %m   输出代码中指定的消息  
53.   %p   输出优先级,即DEBUG,INFO,WARN,ERROR,FATAL   
54.   %r   输出自应用启动到输出该log信息耗费的毫秒数   
55.   %c   输出所属的类目,通常就是所在类的全名   
56.   %t   输出产生该日志事件的线程名   
57.   %n   输出一个回车换行符,Windows平台为“/r/n”,Unix平台为“/n”   
58. 2002年10月18日  22 : 10 : 28 , 921    
59. 10 )    
60. 2. 在代码中初始化Logger:   
61. 1)在程序中调用BasicConfigurator.configure()方法:给根记录器增加一个ConsoleAppender,输出格式通过PatternLayout设为"%-4r [%t] %-5p %c %x - %m%n",还有根记录器的默认级别是Level.DEBUG.   
62. 2)配置放在文件里,通过命令行参数传递文件名字,通过PropertyConfigurator.configure(args[x])解析并配置;  
63. 3)配置放在文件里,通过环境变量传递文件名等信息,利用log4j默认的初始化过程解析并配置;  
64. 4)配置放在文件里,通过应用服务器配置传递文件名等信息,利用一个特殊的servlet来完成配置。  
65.   
66.   
67. 3. 为不同的 Appender 设置日志输出级别:  
68. 当调试系统时,我们往往注意的只是异常级别的日志输出,但是通常所有级别的输出都是放在一个文件里的,如果日志输出的级别是BUG!?那就慢慢去找吧。  
69. 这时我们也许会想要是能把异常信息单独输出到一个文件里该多好啊。当然可以,Log4j已经提供了这样的功能,我们只需要在配置中修改Appender的Threshold 就能实现,比如下面的例子:  
70.   
71.   
72. [配置文件]  
73.   
74.   
75.   
76.   
77.  ### set log levels ###  
78. log4j.rootLogger = debug ,  stdout ,  D ,  E  
79.   
80.   
81. ### 输出到控制台 ###  
82. log4j.appender.stdout = org.apache.log4j.ConsoleAppender  
83. log4j.appender.stdout.Target = System.out  
84. log4j.appender.stdout.layout = org.apache.log4j.PatternLayout  
85. log4j.appender.stdout.layout.ConversionPattern =  %d{ABSOLUTE} %5p %c{ 1 }:%L - %m%n  
86.   
87.   
88. ### 输出到日志文件 ###  
89. log4j.appender.D = org.apache.log4j.DailyRollingFileAppender  
90. log4j.appender.D.File = logs/log.log  
91. log4j.appender.D.Append = true  
92. log4j.appender.D.Threshold = DEBUG ## 输出DEBUG级别以上的日志  
93. log4j.appender.D.layout = org.apache.log4j.PatternLayout  
94. log4j.appender.D.layout.ConversionPattern = %-d{yyyy-MM-dd HH:mm:ss}  [ %t:%r ] - [ %p ]  %m%n  
95.   
96.   
97. ### 保存异常信息到单独文件 ###  
98. log4j.appender.D = org.apache.log4j.DailyRollingFileAppender  
99. log4j.appender.D.File = logs/error.log ## 异常日志文件名  
100. log4j.appender.D.Append = true  
101. log4j.appender.D.Threshold = ERROR ## 只输出ERROR级别以上的日志!!!  
102. log4j.appender.D.layout = org.apache.log4j.PatternLayout  
103. log4j.appender.D.layout.ConversionPattern = %-d{yyyy-MM-dd HH:mm:ss}  [ %t:%r ] - [ %p ]  %m%n   
104. [代码中使用]   
105.   
106.   
107.   
108.   
109. public   class  TestLog4j   {  
110. public   static   void  main(String[] args)   {  
111. " D:/Code/conf/log4j.properties " );  
112. class );  
113. " debug " );  
114. " error " );  
115.     }   
116. }   
117. 运行一下,看看异常信息是不是保存在了一个单独的文件error.log中  
118.   
119.   
120.    
121.   
122.   
123.    
124.   
125.   
126.    
127.   
128.   
129.    
130.   
131.   
132. log4j.properties 使用  
133. 一.参数意义说明  
134. 输出级别的种类  
135. ERROR、WARN、INFO、DEBUG  
136. ERROR 为严重错误 主要是程序的错误  
137. WARN 为一般警告,比如session丢失  
138. INFO 为一般要显示的信息,比如登录登出  
139. DEBUG 为程序的调试信息  
140. 配置日志信息输出目的地  
141. log4j.appender.appenderName = fully.qualified.name.of.appender.class  
142. 1.org.apache.log4j.ConsoleAppender(控制台)  
143. 2.org.apache.log4j.FileAppender(文件)  
144. 3.org.apache.log4j.DailyRollingFileAppender(每天产生一个日志文件)  
145. 4.org.apache.log4j.RollingFileAppender(文件大小到达指定尺寸的时候产生一个新的文件)  
146. 5.org.apache.log4j.WriterAppender(将日志信息以流格式发送到任意指定的地方)  
147. 配置日志信息的格式  
148. log4j.appender.appenderName.layout = fully.qualified.name.of.layout.class  
149. 1.org.apache.log4j.HTMLLayout(以HTML表格形式布局),  
150. 2.org.apache.log4j.PatternLayout(可以灵活地指定布局模式),  
151. 3.org.apache.log4j.SimpleLayout(包含日志信息的级别和信息字符串),  
152. 4.org.apache.log4j.TTCCLayout(包含日志产生的时间、线程、类别等等信息)  
153. 控制台选项  
154. Threshold=DEBUG:指定日志消息的输出最低层次。  
155. ImmediateFlush=true:默认值是true,意谓着所有的消息都会被立即输出。  
156. Target=System.err:默认情况下是:System.out,指定输出控制台  
157. FileAppender 选项  
158. Threshold=DEBUF:指定日志消息的输出最低层次。  
159. ImmediateFlush=true:默认值是true,意谓着所有的消息都会被立即输出。  
160. File=mylog.txt:指定消息输出到mylog.txt文件。  
161. Append=false:默认值是true,即将消息增加到指定文件中,false指将消息覆盖指定的文件内容。  
162. RollingFileAppender 选项  
163. Threshold=DEBUG:指定日志消息的输出最低层次。  
164. ImmediateFlush=true:默认值是true,意谓着所有的消息都会被立即输出。  
165. File=mylog.txt:指定消息输出到mylog.txt文件。  
166. Append=false:默认值是true,即将消息增加到指定文件中,false指将消息覆盖指定的文件内容。  
167. MaxFileSize=100KB: 后缀可以是KB, MB 或者是 GB. 在日志文件到达该大小时,将会自动滚动,即将原来的内容移到mylog.log.1文件。  
168. MaxBackupIndex=2:指定可以产生的滚动文件的最大数。  
169. log4j.appender.A1.layout.ConversionPattern=%-4r %-5p %d{yyyy-MM-dd HH:mm:ssS} %c %m%n  
170. 日志信息格式中几个符号所代表的含义:  
171.  -X号: X信息输出时左对齐;  
172.  %p: 输出日志信息优先级,即DEBUG,INFO,WARN,ERROR,FATAL,  
173. 2002年10月18日 22:10:28,921  
174.  %r: 输出自应用启动到输出该log信息耗费的毫秒数  
175.  %c: 输出日志信息所属的类目,通常就是所在类的全名  
176.  %t: 输出产生该日志事件的线程名  
177. 10)  
178.  %x: 输出和当前线程相关联的NDC(嵌套诊断环境),尤其用到像java servlets这样的多客户多线程的应用中。  
179. "%"字符  
180.  %F: 输出日志消息产生时所在的文件名称  
181.  %L: 输出代码中的行号  
182.  %m: 输出代码中指定的消息,产生的日志具体信息  
183. "/r/n",Unix平台为"/n"输出日志信息换行  
184.  可以在%与模式字符之间加上修饰符来控制其最小宽度、最大宽度、和文本的对齐方式。如:  
185. 1)%20c:指定输出category的名称,最小的宽度是20,如果category的名称小于20的话,默认的情况下右对齐。  
186. 2)%-20c:指定输出category的名称,最小的宽度是20,如果category的名称小于20的话,"-"号指定左对齐。  
187. 3)%.30c:指定输出category的名称,最大的宽度是30,如果category的名称大于30的话,就会将左边多出的字符截掉,但小于30的话也不会有空格。  
188. 4)%20.30c:如果category的名称小于20就补空格,并且右对齐,如果其名称长于30字符,就从左边较远输出的字符截掉。  
189. 二.文件配置Sample1  
190. log4j.rootLogger=DEBUG,A1,R  
191. #log4j.rootLogger=INFO,A1,R  
192. # ConsoleAppender 输出  
193. log4j.appender.A1=org.apache.log4j.ConsoleAppender  
194. log4j.appender.A1.layout=org.apache.log4j.PatternLayout  
195. log4j.appender.A1.layout.ConversionPattern=%-d{yyyy-MM-dd HH:mm:ss,SSS} [%c]-[%p] %m%n  
196. # File 输出 一天一个文件,输出路径可以定制,一般在根路径下  
197. log4j.appender.R=org.apache.log4j.DailyRollingFileAppender  
198. log4j.appender.R.File=blog_log.txt  
199. log4j.appender.R.MaxFileSize=500KB  
200. log4j.appender.R.MaxBackupIndex=10  
201. log4j.appender.R.layout=org.apache.log4j.PatternLayout  
202. log4j.appender.R.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss,SSS} [%t] [%c] [%p] - %m%n  
203. 文件配置Sample2  
204. 下面给出的Log4J配置文件实现了输出到控制台,文件,回滚文件,发送日志邮件,输出到数据库日志表,自定义标签等全套功能。  
205. log4j.rootLogger=DEBUG,CONSOLE,A1,im   
206. #DEBUG,CONSOLE,FILE,ROLLING_FILE,MAIL,DATABASE  
207. log4j.addivity.org.apache=true  
208. ###################   
209. # Console Appender   
210. ###################   
211. log4j.appender.CONSOLE=org.apache.log4j.ConsoleAppender   
212. log4j.appender.Threshold=DEBUG   
213. log4j.appender.CONSOLE.Target=System.out   
214. log4j.appender.CONSOLE.layout=org.apache.log4j.PatternLayout   
215. log4j.appender.CONSOLE.layout.ConversionPattern=[framework] %d - %c -%-4r [%t] %-5p %c %x - %m%n   
216. #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  
217. #####################   
218. # File Appender   
219. #####################   
220. log4j.appender.FILE=org.apache.log4j.FileAppender   
221. log4j.appender.FILE.File=file.log   
222. log4j.appender.FILE.Append=false   
223. log4j.appender.FILE.layout=org.apache.log4j.PatternLayout   
224. log4j.appender.FILE.layout.ConversionPattern=[framework] %d - %c -%-4r [%t] %-5p %c %x - %m%n   
225. # Use this layout for LogFactor 5 analysis  
226. ########################   
227. # Rolling File   
228. ########################   
229. log4j.appender.ROLLING_FILE=org.apache.log4j.RollingFileAppender   
230. log4j.appender.ROLLING_FILE.Threshold=ERROR   
231. log4j.appender.ROLLING_FILE.File=rolling.log   
232. log4j.appender.ROLLING_FILE.Append=true   
233. log4j.appender.ROLLING_FILE.MaxFileSize=10KB   
234. log4j.appender.ROLLING_FILE.MaxBackupIndex=1   
235. log4j.appender.ROLLING_FILE.layout=org.apache.log4j.PatternLayout   
236. log4j.appender.ROLLING_FILE.layout.ConversionPattern=[framework] %d - %c -%-4r [%t] %-5p %c %x - %m%n  
237. ####################   
238. # Socket Appender   
239. ####################   
240. log4j.appender.SOCKET=org.apache.log4j.RollingFileAppender   
241. log4j.appender.SOCKET.RemoteHost=localhost   
242. log4j.appender.SOCKET.Port=5001   
243. log4j.appender.SOCKET.LocationInfo=true   
244. # Set up for Log Facter 5   
245. log4j.appender.SOCKET.layout=org.apache.log4j.PatternLayout   
246. 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  
247. ########################   
248. # Log Factor 5 Appender   
249. ########################   
250. log4j.appender.LF5_APPENDER=org.apache.log4j.lf5.LF5Appender   
251. log4j.appender.LF5_APPENDER.MaxNumberOfRecords=2000  
252. ########################   
253. # SMTP Appender   
254. #######################   
255. log4j.appender.MAIL=org.apache.log4j.net.SMTPAppender   
256. log4j.appender.MAIL.Threshold=FATAL   
257. log4j.appender.MAIL.BufferSize=10   
258. log4j.appender.MAIL.From=chenyl@yeqiangwei.com  
259. log4j.appender.MAIL.SMTPHost=mail.hollycrm.com   
260. log4j.appender.MAIL.Subject=Log4J Message   
261. log4j.appender.MAIL.To=chenyl@yeqiangwei.com  
262. log4j.appender.MAIL.layout=org.apache.log4j.PatternLayout   
263. log4j.appender.MAIL.layout.ConversionPattern=[framework] %d - %c -%-4r [%t] %-5p %c %x - %m%n  
264. ########################   
265. # JDBC Appender   
266. #######################   
267. log4j.appender.DATABASE=org.apache.log4j.jdbc.JDBCAppender   
268. log4j.appender.DATABASE.URL=jdbc:mysql://localhost:3306/test   
269. log4j.appender.DATABASE.driver=com.mysql.jdbc.Driver   
270. log4j.appender.DATABASE.user=root   
271. log4j.appender.DATABASE.password=   
272. log4j.appender.DATABASE.sql=INSERT INTO LOG4J (Message) VALUES ('[framework] %d - %c -%-4r [%t] %-5p %c %x - %m%n')   
273. log4j.appender.DATABASE.layout=org.apache.log4j.PatternLayout   
274. log4j.appender.DATABASE.layout.ConversionPattern=[framework] %d - %c -%-4r [%t] %-5p %c %x - %m%n  
275. log4j.appender.A1=org.apache.log4j.DailyRollingFileAppender   
276. log4j.appender.A1.File=SampleMessages.log4j   
277. log4j.appender.A1.DatePattern=yyyyMMdd-HH'.log4j'   
278. log4j.appender.A1.layout=org.apache.log4j.xml.XMLLayout  
279. ###################   
280. #自定义Appender   
281. ###################   
282. log4j.appender.im = net.cybercorlin.util.logger.appender.IMAppender  
283. log4j.appender.im.host = mail.cybercorlin.net   
284. log4j.appender.im.username = username   
285. log4j.appender.im.password = password   
286. log4j.appender.im.recipient = corlin@yeqiangwei.com  
287. log4j.appender.im.layout=org.apache.log4j.PatternLayout   
288. log4j.appender.im.layout.ConversionPattern =[framework] %d - %c -%-4r [%t] %-5p %c %x - %m%n  
289. 三.高级使用  
290. 实验目的:  
291. 1.把FATAL级错误写入2000NT日志  
292. 2. WARN,ERROR,FATAL级错误发送email通知管理员  
293. 3.其他级别的错误直接在后台输出  
294. 实验步骤:  
295.  输出到2000NT日志  
296. 1.把Log4j压缩包里的NTEventLogAppender.dll拷到WINNT/SYSTEM32目录下  
297. 2.写配置文件log4j.properties  
298. # 在2000系统日志输出  
299.  log4j.logger.NTlog=FATAL, A8  
300.  # APPENDER A8  
301.  log4j.appender.A8=org.apache.log4j.nt.NTEventLogAppender  
302.  log4j.appender.A8.Source=JavaTest  
303.  log4j.appender.A8.layout=org.apache.log4j.PatternLayout  
304.  log4j.appender.A8.layout.ConversionPattern=%-4r %-5p [%t] %37c %3x - %m%n  
305. 3.调用代码:  
306. "NTlog"); //要和配置文件中设置的名字相同  
307. "debug!!!");  
308. "info!!!");  
309. "warn!!!");  
310. "error!!!");  
311. //只有这个错误才会写入2000日志  
312. "fatal!!!");  
313. 发送email通知管理员:  
314. 1. 首先下载JavaMail和JAF,   
315. //java.sun.com/j2ee/ja/javamail/index.html  
316. //java.sun.com/beans/glasgow/jaf.html  
317.  在项目中引用mail.jar和activation.jar。  
318. 2. 写配置文件  
319.  # 将日志发送到email  
320.  log4j.logger.MailLog=WARN,A5  
321.  #  APPENDER A5  
322.  log4j.appender.A5=org.apache.log4j.net.SMTPAppender  
323. 5  
324. @yeqiangwei.com  
325. @yeqiangwei.com  
326.  log4j.appender.A5.Subject=ErrorLog  
327. 263.net  
328.  log4j.appender.A5.layout=org.apache.log4j.PatternLayout  
329.  log4j.appender.A5.layout.ConversionPattern=%-4r %-5p [%t] %37c %3x - %m%n  
330. 3.调用代码:  
331. //把日志发送到mail  
332. "MailLog");  
333. "warn!!!");  
334. "error!!!");  
335. "fatal!!!");  
336. 在后台输出所有类别的错误:  
337. 1. 写配置文件  
338.  # 在后台输出  
339.  log4j.logger.console=DEBUG, A1  
340.  # APPENDER A1  
341.  log4j.appender.A1=org.apache.log4j.ConsoleAppender  
342.  log4j.appender.A1.layout=org.apache.log4j.PatternLayout  
343.  log4j.appender.A1.layout.ConversionPattern=%-4r %-5p [%t] %37c %3x - %m%n  
344. 2.调用代码  
345. "console");  
346. "debug!!!");  
347. "info!!!");  
348. "warn!!!");  
349. "error!!!");  
350. "fatal!!!");  
351. --------------------------------------------------------------------  
352.  全部配置文件:log4j.properties  
353.  # 在后台输出  
354.  log4j.logger.console=DEBUG, A1  
355.  # APPENDER A1  
356.  log4j.appender.A1=org.apache.log4j.ConsoleAppender  
357.  log4j.appender.A1.layout=org.apache.log4j.PatternLayout  
358.  log4j.appender.A1.layout.ConversionPattern=%-4r %-5p [%t] %37c %3x - %m%n  
359. # 在2000系统日志输出  
360.  log4j.logger.NTlog=FATAL, A8  
361.  # APPENDER A8  
362.  log4j.appender.A8=org.apache.log4j.nt.NTEventLogAppender  
363.  log4j.appender.A8.Source=JavaTest  
364.  log4j.appender.A8.layout=org.apache.log4j.PatternLayout  
365.  log4j.appender.A8.layout.ConversionPattern=%-4r %-5p [%t] %37c %3x - %m%n  
366. # 将日志发送到email  
367.  log4j.logger.MailLog=WARN,A5  
368.  #  APPENDER A5  
369.  log4j.appender.A5=org.apache.log4j.net.SMTPAppender  
370. 5  
371. @yeqiangwei.com  
372. @yeqiangwei.com  
373.  log4j.appender.A5.Subject=ErrorLog  
374. 263.net  
375.  log4j.appender.A5.layout=org.apache.log4j.PatternLayout  
376.  log4j.appender.A5.layout.ConversionPattern=%-4r %-5p [%t] %37c %3x - %m%n  
377. 全部代码:Log4jTest.java  
378.     
379. /* 
380.   * 创建日期 2003-11-13 
381.   */   
382. package edu.bcu.Bean;   
383. import org.apache.log4j.*;   
384. //import org.apache.log4j.nt.*;   
385. //import org.apache.log4j.net.*;   
386. /** 
387.   * @author yanxu 
388.   */   
389. public class Log4jTest   
390.  {   
391. public static void main(String args[])   
392.   {   
393. "log4j.properties");   
394. //在后台输出   
395. "console");   
396. "debug!!!");   
397. "info!!!");   
398. "warn!!!");   
399. "error!!!");   
400. "fatal!!!");  
401. //在NT系统日志输出   
402. "NTlog");   
403. //NTEventLogAppender nla = new NTEventLogAppender();   
404. "debug!!!");   
405. "info!!!");   
406. "warn!!!");   
407. "error!!!");   
408. //只有这个错误才会写入2000日志   
409. "fatal!!!");  
410. //把日志发送到mail   
411. "MailLog");   
412. //SMTPAppender sa = new SMTPAppender();   
413. "warn!!!");   
414. "error!!!");   
415. "fatal!!!");   
416.   }   
417.  }