什么是log4j?
- Apache 基金的一个开源项目
- 日志文件发送到console、text文件、html文件、xml文件或电子邮件
- Logger(category) : 制作日志文件的类,往Appender发送消息
- Appender : 输出日志的位置 (ex) ConsoleAppender, FileAppender..
- Layout : Appender日志生成之前的消息样式的指定
下载 log4j 包
第一步:访问 http://logging.apache.org/,选择 Apache log4j 1
第二步:选择一个链接下载包
第三步:解压下载的包
放置到工程里面
拷贝 log4j-1.2.17.jar,放到web工程的lib下面
=============================================================================================
log4j 设置方法
(一)java 代码中直接使用
(二)log4j.properties(最常用)
(三)log4.xml
第一种方法:java 代码中直接使用
package com.test; import org.apache.log4j.BasicConfigurator; import org.apache.log4j.Logger; public class LoggerTest { static Logger logger = Logger.getLogger(LoggerTest.class); public LoggerTest() { } public static void main(String[] args) { /* * 往console输出日志 * 如果没有这段落,出现警告消息后执行退出 */ BasicConfigurator.configure(); logger.debug("[DEBUG] Hello log4j."); logger.info("[INFO] Hello log4j."); logger.warn("[WARN] Hello log4j."); logger.error("[ERROR] Hello log4j."); logger.fatal("[FATAL] Hello log4j."); } }
输出日志为
0 [main] DEBUG com.test.LoggerTest - [DEBUG] Hello World
5 [main] INFO com.test.LoggerTest - [INFO] Hello World
5 [main] WARN com.test.LoggerTest - [WARN] Hello World
5 [main] ERROR com.test.LoggerTest - [ERROR] Hello World
5 [main] FATAL com.test.LoggerTest - [FATAL] Hello World
输出日志说明
第一行为例:
0 - 开始调用到结束时间(毫秒)
[main] - 调用的线程名称
DEBUG - 日志等级
LoggerTest - 类名
[DEBUG]Hello World - 日志消息
log 等级
DEBUG < INFO < WARN < ERROR < FATAL
DEBUG : 调试
INFO : 信息
WARN : 警告
ERROR : 错误
FATAL : 致命错误
log4j Layout的种类
1) DateLayout
2) HTMLLayout
3) PatternLayout(比较适合用于debug中)
4) SimpleLayout
5) XMLLayout
PatternLayout说明
[%d{yyyy-MM-dd HH:mm:ss}] %-5p [%l] - %m%n
C : 输出类名
d : 输出日志时间
F : 输出文件名
L : 输出行号
m : 输出向日志传输的消息
M : 输出执行的方法名
n : 换行
p : 日志事件名(DEBUG等)
r : 日志处理时间(毫秒)
PatternLayout 测试
package com.test.log; import java.io.IOException; import org.apache.log4j.DailyRollingFileAppender; import org.apache.log4j.Logger; import org.apache.log4j.PatternLayout; public class DailyLog { static Logger logger = Logger.getLogger(DailyLog.class); public static void main(String[] args) { // 日志输出模式 String pattern = "[%d{yyyy-MM-dd HH:mm:ss}] %-5p [%l] - %m%n"; PatternLayout layout = new PatternLayout(pattern); // 日志文件名称 String fileName = "DailyLog"; // 文件的日期模式 String datePattern = ".yyyy-MM-dd"; DailyRollingFileAppender appender = null; try { appender = new DailyRollingFileAppender(layout, fileName, datePattern); } catch (IOException e) { e.printStackTrace(); } logger.addAppender(appender); logger.debug("log4j test"); } }
输出目录在
打开DailyLog文件
[2015-09-18 08:58:04] DEBUG [com.test.log.DailyLog.main(DailyLog.java:33)] - log4j test
解析输出结果:
第一个:日期
第二个:日志Level
第三个:完整类名.方法名(类名:行号)
第四个:打出的日志
第二种方法:log4j.properties(最常用)
1、在src根目录中创建 log4j.properties 文件
#log4j.rootLogger=DEBUG, A1 log4j.rootLogger=OFF, A1 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}] - %m%n |
2、编写测试程序
package com.test.log; import org.apache.log4j.Logger; public class LogProperty01 { static Logger logger = Logger.getLogger(LogProperty01.class); public static void main(String[] args) { logger.debug("===== log Property ====="); } }
执行run后,控制台什么都没有打出。
改一下配置文件的注释地方后重新执行
log4j.rootLogger=DEBUG, A1 #log4j.rootLogger=OFF, A1 |
控制台打印出
[2015-09-18 11:19:51] - ===== log Property =====
修改一下log4j.properties文件
log4j.rootLogger=DEBUG, A1 log4j.appender.A1=org.apache.log4j.DailyRollingFileAppender log4j.appender.A1.File=test.log log4j.appender.A1.DatePattern='.'yyyy-mm-dd log4j.appender.A1.layout=org.apache.log4j.PatternLayout log4j.appender.A1.layout.ConversionPattern=[%d{yyyy-MM-dd HH:mm:ss}] %-5p [%l] - %m%n |
执行测试程序LogProperty01.java后会生成 test.log文件
文件里面内容是
[2015-09-18 11:40:00] DEBUG [com.test.log.LogProperty01.main(LogProperty01.java:10)] - ===== log Property =====
完成配置文件
### set log levels ###
log4j.rootLogger = debug, stdout, W, E
### 输出到控制台 ###
log4j.appender.stdout = org.apache.log4j.ConsoleAppender
log4j.appender.stdout.Target = System.out
log4j.appender.stdout.layout = org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern = [%d{yyyy-MM-dd HH:mm:ss}] %r %-5p [%l] - %n%m%n
log4j.logger.java.sql.Connection=SQL
log4j.logger.java.sql.Statement=SQL
log4j.logger.java.sql.PreparedStatement=SQL
### 输出到日志文件 ###
log4j.appender.W = org.apache.log4j.DailyRollingFileAppender
log4j.appender.W.File = logs/log.log
log4j.appender.W.Append = true
log4j.appender.W.Threshold = WARN
log4j.appender.W.layout = org.apache.log4j.PatternLayout
log4j.appender.W.layout.ConversionPattern = %d{yyyy-MM-dd HH:mm:ss} [ %t:%r ] - [%p] - %m%n
### 保存异常信息到单独文件 ###
log4j.appender.E = org.apache.log4j.DailyRollingFileAppender
log4j.appender.E.File = logs/error.log
log4j.appender.E.Append = true
log4j.appender.E.Threshold = ERROR
log4j.appender.E.layout = org.apache.log4j.PatternLayout
log4j.appender.E.layout.ConversionPattern = %d{yyyy-MM-dd HH:mm:ss} [ %t:%r ] - [%p] - %m%n
[参考文件]
http://www.blogjava.net/zJun/archive/2006/06/28/55511.html