A.目的
1.输出调试信息
2.记录程序运行跟踪信息
3.记录错误信息
B.组成
1.记录器logger
a.记录器
a1.根记录器 :log4j.rootLogger=级别,追加器1,追加器2...
a2.命名记录器:名称:com.learn.service 用包名称
log4j.logger.com.learn.service=级别,追加器1,追加器2...
b.日志级别: ALL
单词不区分大小写
c.继承与附加关系:默认子记录器会继承上一级记录器的追加器和级别
2.追加器appender:
追加器(目的地)AppName
log4j.appender.AppName=org.apache.log4j.ConsoleAppender
a.控制台:
org.apache.log4j.ConsoleAppender
log4j.appender.C=org.apache.log4j.ConsoleAppender
b.文件:
org.apache.log4j.FileAppender
log4j.appender.F=org.apache.log4j.FileAppender
log4j.appender.F.File=example.log
log4j.appender.F.Append=true
c.滚动文件:
org.apache.log4j.RollingFileAppender
log4j.appender.R=org.apache.log4j.RollingFileAppender
log4j.appender.R.File=example.log
log4j.appender.R.MaxFileSize=100KB
log4j.appender.R.MaxBackupIndex=1
d.每日滚动文件:
org.apache.log4j.DailyRollingFileAppender
log4j.appender.DR=org.apache.log4j.DailyRollingFileAppender
log4j.appender.DR.DatePattern='.'yyyy-MM-dd
log4j.appender.DR.File=C://logs/log.txt
log4j.appender.DR.Append=true
e.数据库JDBC:
org.apache.log4j.jdbc.JDBCAppender
f.网络:
org.apache.log4j.net.JMSAppender
org.apache.log4j.net.SMTPAppender
org.apache.log4j.net.SocketAppender
g.事件日志:
org.apache.log4j.nt.NTEventLogAppender
3.格式化layout:
log4j.appender.A1.layout=org.apache.log4j.PatternLayout
log4j.appender.A1.layout.ConversionPattern=%-4r %-5p [%t] %37c %3x - %m%n
a. PatternLayout:org.apache.log4j.PatternLayout(可以灵活地指定布局模式)
a1. ConversionPattern:
如果使用pattern布局就要指定的打印信息的具体格式ConversionPattern打印参数
如下:
%m输出代码中指定的消息;
%M输出打印该条日志的方法名;
%p输出优先级,即DEBUG,INFO,WARN,ERROR,FATAL;
%r输出自应用启动到输出该log信息耗费的毫秒数;
%c输出所属的类目,通常就是所在类的全名;
%t输出产生该日志事件的线程名;
%n输出一个回车换行符,Windows平台为"rn”,Unix平台为"n”;
%d输出日志时间点的日期或时间,默认格式为ISO8601,
也可以在其后指定格式,比如:%d{yyyy-MM-ddHH:mm:ss,SSS}
%l输出日志事件的发生位置,及在代码中的行数;
//例子
%10c %-10M %m %n
%10c 显示类名称,10个字符宽,右对齐
%-10M 显示方法名,10个字符宽,左对齐(-)
b. HTMLLayout:org.apache.log4j.HTMLLayout 以HTML表格形式布局
c. SimpleLayout:org.apache.log4j.SimpleLayout 包含日志信息的级别和信息字符串
d. TTCCLayout:org.apache.log4j.TTCCLayout 包含日志产生的时间线程类别等信息
C.使用
1.配置文件
properties
xml
2.程序代码
a.加载配置文件
a1.默认加载:将log4j.properties文件放在根目录下即可
a2.属性文件:PropertyConfigurator.configure("配置文件名称");
a3.XML文件:DOMConfigurator.configure("配置文件名称");
b.获得日志记录器:
方式一:
Logger logger = Logger.getLogger(UserDAO.class);
方式二:
Logger logger = Logger.getLogger("loggerName");
c.指定继承附加属性:logger.setAdditivity(false);
d.相应位置写日志:
方式一
public void log(Level l, Object message);
方式二
public void trace(Object message);
public void debug(Object message);
public void info(Object message);
public void warn(Object message);
public void error(Object message);
public void fatal(Object message);
//例子
logger.debug("debug->name:" + user.getName() + "pass:" + user.getPass());
// 业务--加密
user.setPass(user.getPass() + "!");
logger.info("info->name:" + user.getName() + "pass:" + user.getPass());
try {
dao.insert(user);
} catch (Exception e) {
logger.error(e.getMessage());
}
e.性能优化:
先判断一下在输出日志
if(logger.isDebugEnabled() ){
logger.debug("日志信息");
}