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. }
java 设置默认日志级别 java 日志级别配置
转载本文章为转载内容,我们尊重原作者对文章享有的著作权。如有内容错误或侵权问题,欢迎原作者联系我们进行内容更正或删除文章。
提问和评论都可以,用心的回复会被更多人看到
评论
发布评论
相关文章
-
Hadoop动态调整日志级别
hadoop 动态调整日志
apache java hadoop -
java中springboot项目改变日志级别配置 springboot日志级别设置
文章目录前言实战1. 实现服务器端日志浏览2. 实现日志级别查询3. 实现日志的级别动态设置 前言通过前2篇原理剖析我们已经可以模拟造轮子了,本篇内容来实战一波。在实际项目开发中,一般的业务配置刷新,直接用@RefreshScope+@Value即可,但是我们项目上经常会遇到这样的场景,无法简单的用@RefreshScope+@Value实现,例如:线上跑的实例配置的日志级别是ERROR级别或者
spring boot java spring cloud alibaba spring cloud System